Как мне издеваться над Redis при использовании Supertest в Express? - PullRequest
0 голосов
/ 10 января 2019

Я строю REST API в Express и пытаюсь смоделировать Redis в моих модульных тестах Jasmine (используя redis-mock).

Если supertest делает запрос к API, как я могу сказать моему приложению использовать фиктивный Redis вместо реального redis? .Я знаю, что мне, вероятно, понадобится создать отдельные модули для redis, которые я могу как-то поменять, но не знаю, как поменять их для обычного запроса на супер-запрос.

Юнит тест:

describe('Instance API v1', () => {
    it('returns a list of instances', (done) => {
        request(app.default)
            .get('/v1/instance')
            .set('Authorization', 'Bearer '+authToken)
            .expect(200)
            .expect('Content-Type', 'application/json; charset=utf-8')
            .end((error) => (error) ? done.fail(error) : done());
    });
});

Обработчик маршрута:

 getAll = (request: express.Request, response: express.Response) => {
        let redis: RedisClient = request.app.locals.redisclient;

        let keys:string[] = [];
        let prefix = 'instance/*';

        const scanner = new RedisScan(redis);

        scanner.scan('instances/*', (err, matchingKeys) => {
            if (err) throw(err);

            // matchingKeys will be an array of strings if matches were found
            // otherwise it will be an empty array.
            console.log(matchingKeys);

            response.json(matchingKeys);


        });
    };

1 Ответ

0 голосов
/ 02 февраля 2019

В своем предыдущем опыте я не издевался над Redis в интеграционном тесте, поэтому я могу протестировать поток в полной функциональности.

Если вы хотите издеваться над Redis, вы должны сделать это до того, как вам потребуется, и запустить приложение в тесте примерно так:

before(function() {
  const matchingKeys = '1234'; 
  sinon.stub(RedisScan.prototype, 'scan').yields(null, matchingKeys);

  const app = require('./app');
  return app.init(); // your init or whatever function to initiate your express app
});

Надеюсь, это поможет

...