Skip to content

Repository files navigation

Redis PHP Mock Build StatusTotal Downloads

PHP 7.1 library providing a Redis PHP mock for your tests.

Work for now only with predis

Installation

$ composer require --dev m6web/redis-mock

Functions

It currently mocks these Redis commands :

Redis commandDescription
DBSIZEReturns the number of keys in the selected database
DELkey[key ...]Deletes one or more keys
DECRkeyDecrements the integer value of a key by one
DECRBYkeydecrementDecrements the integer value of a key by decrement value
DECRBYFLOATkeydecrementDecrements the float value of a key by decrement value
EXISTSkeyDetermines if a key exists
EXPIREkeysecondsSets a key's time to live in seconds
FLUSHDBFlushes the database
GETkeyGets the value of a key
HDELkeyarray<fields>Delete hash fields
HEXISTSkeyfieldDetermines if a hash field exists
HMGETkeyarray<field>Gets the values of multiple hash fields
HGETkeyfieldGets the value of a hash field
HGETALLkeyGets all the fields and values in a hash
HKEYSkeyGets all the fields in a hash
HLENkeyGets the number of fields in a hash
HMSETkeyarray<field, value>Sets each value in the corresponding field
HSETkeyfieldvalueSets the string value of a hash field
HSETNXkeyfieldvalueSets field in the hash stored at key to value, only if field does not yet exist
HINCRBYkeyfieldincrementIncrements the integer stored at field in the hash stored at key by increment.
INCRkeyIncrements the integer value of a key by one
INCRBYkeyincrementIncrements the integer value of a key by increment value
INCRBYFLOATkeyincrementIncrements the float value of a key by increment value
KEYSpatternFinds all keys matching the given pattern
LINDEXkeyindexReturns the element at index index in the list stored at key
LLENkeyReturns the length of the list stored at key
LPUSHkeyvalue[value ...]Pushs values at the head of a list
LPOPkeyPops values at the head of a list
LREMkeyvaluecountRemoves count instances of value from the head of a list (follows the predis parameters order)
LTRIMkeystartstopRemoves the values of the key list which are outside the range start...stop
LRANGEkeystartstopGets a range of elements from a list
MGETarray<field>Gets the values of multiple keys
MSETarray<field, value>Sets the string values of multiple keys
QUITQuit the REDIS
RPUSHkeyvaluePushs values at the tail of a list
RPOPkeyPops values at the tail of a list
SCANIterates the set of keys in the currently selected Redis database.
SSCANIterates elements of Sets types.
SETkeyvalueSets the string value of a key
SETEXkeysecondsvalueSets the value and expiration of a key
SETNXkeyvalueSets key to hold value if key does not exist
SADDkeymember[member ...]Adds one or more members to a set
SDIFFkeykey[key ...]Returns the members of the set resulting from the difference between the first set and all the successive sets.
SISMEMBERkeymemberDetermines if a member is in a set
SMEMBERSkeyGets all the members in a set
SUNIONkey[key ...]Returns the members of the set resulting from the union of all the given sets.
SINTERkey[key ...]Returns the members of the set resulting from the intersection of all the given sets.
SCARDkeyGet cardinality of set (count of members)
SREMkeymember[member ...]Removes one or more members from a set
TTLkey Gets the time to live for a key
TYPEkeyReturns the string representation of the type of the value stored at key.
ZADDkeyscorememberAdds one member to a sorted set, or update its score if it already exists
ZINCRBYkeyincrementmemberIncrements the score of member in the sorted set stored at key by increment
ZCARDkeyReturns the sorted set cardinality (number of elements) of the sorted set stored at key
ZCOUNTkeyminmaxReturns the number of elements in the stored set at key with a score between min and max.
ZRANGEkeystartstop[withscores]Returns the specified range of members in a sorted set
ZRANGEBYSCOREkeyminmaxoptionsReturns a range of members in a sorted set, by score
ZRANKkeymemberReturns the rank of member in the sorted set stored at key, with the scores ordered from low to high
ZREVRANKkeymemberReturns the rank of member in the sorted set stored at key, with the scores ordered from high to low
ZREMkeymemberRemoves one membner from a sorted set
ZREMRANGEBYSCOREkeyminmaxRemoves all members in a sorted set within the given scores
ZREVRANGEkeystartstop[withscores]Returns the specified range of members in a sorted set, with scores ordered from high to low
ZREVRANGEBYSCOREkeyminmaxoptionsReturns a range of members in a sorted set, by score, with scores ordered from high to low
ZSCANIterates elements of Sorted Sets types.
ZSCOREkeymemberReturns the score of member in the sorted set at key
ZUNIONSTOREdestnumkeyskey ... [weights ...][aggregate SUM/MIN/MAX]Computes the union of the stored sets given by the specified keys, store the result in the destination key, and returns the number of elements of the new sorted set.

It mocks MULTI, DISCARD and EXEC commands but without any transaction behaviors, they just make the interface fluent and return each command results. PIPELINE and EXECUTE pseudo commands (client pipelining) are also mocked. EVAL, EVALSHA, WATCH and UNWATCH are just stubs—they won't execute anything

Usage

RedisMock library provides a factory able to build a mocked class of your Redis library that can be directly injected in your application :

$factory = new \M6Web\Component\RedisMock\RedisMockFactory();
$myRedisMockClass = $factory->getAdapterClass('My\Redis\Library');
$myRedisMock = new$myRedisMockClass($myParameters);

In a simpler way, if you don't need to instanciate the mocked class with custom parameters (e.g. to easier inject the mock using Symfony config file), you can use getAdapter instead of getAdapterClass to directly create the adapter :

$factory = new \M6Web\Component\RedisMock\RedisMockFactory();
$myRedisMock = $factory->getAdapter('My\Redis\Library');

WARNING !

  • RedisMock doesn't implement all Redis features and commands. The mock can have undesired behavior if your parent class uses unsupported features.
  • Storage is static and therefore shared by all instances.

Note : the factory will throw an exception by default if your parent class implements unsupported commands. If you want even so partially use the mock, you can specify the second parameter when you build it $factory->getAdapter('My\Redis\Library', true). The exception will then thrown only when the command is called.

Static storage & Multiple servers

The storage in the RedisMock class is organized by named areas. The default area's name is the empty string '' but you can specify an alternate area name when calling the factory's getAdapter method.

getAdapter($classToExtend, $failOnlyAtRuntime = false, $ignoreConstructor = true, $storage = '')

This enables the mocking of several remote Redis servers, each one with its own storage area.

However, one same area remains statically shared across all the instances bound to it.

Tests

The development environment is provided by Vagrant and the Xotelia box.

$ cp Vagrantfile.dist Vagrantfile
$ vagrant up
$ vagrant ssh
$ cd /vagrant
$ composer install
$ ./vendor/bin/atoum

Credits

Developped by the Cytron Team of M6 Web.
Tested with atoum.

License

RedisMock is licensed under the MIT license.

Releases

Packages

Used by

Contributors

Languages