Skip to content

SkewedAspect/redmock

 
 

Repository files navigation

RedMock

Build Status

Mock Redis server for Node unit tests.

Requires Node version 8.1.0 or higher for the newest language features.

Purpose

This project was created to help unit test applications using Redis. Stubbing out the redis client to perform unit tests is problematic, because it requires tying tests to the api of a dependency, not the application code. Version upgrades, or other dependency changes. Instead, RedMock can be used to do full integration testing, without needing to start a real redis server.

Fork

This project has been forked to update dependencies and try to bring the code base into a more modern state, thanks to advances in node.js since v5. The code is being cleaned up, and examples/tests are being updated.

Usage

npm

$ npm install -D @skewedaspect/redmock

yarn

$ yarn add -D @skewedaspect/redmock

Starting the server

Call the start method after creating a new instance of the RedisServer class. This method returns an ES6 promise.

const RedisServer = require('@skewedaspect/redmock');

const redisServer = new RedisServer();

redisServer
    .start()
    .then((res) =>
    {
        // Server is now up
    })
    .catch((err) =>
    {
        // Deal with error
    });

Stopping the server

Call the stop method. This method returns a promise. (This message does not error.)

redisServer
    .stop()
    .then((res) =>
    {
        // Server is now stopped
    });

Example test

// require needed modules

describe('SomeTestSpec', () =>
{
    let redisServer, underTest;

    // Start the server
    before(() =>
    {
        redisServer = new RedisServer();
        return redisServer.start();
    });

    // Stop the server
    after(() =>
    {
        return redisServer.stop();
    });

    describe('#somemethod()', () =>
    {
        let underTest;
        beforeEach(() => 
        {
            underTest = new UnderTest();
        });

        it('should test it', () =>
        {
            return underTest.somemethod().should.eventually.equal(true);
        });
    });
});