Можно ли использовать библиотеку тестирования узлов Rewire, чтобы смоделировать два вызова одной и той же функции, чтобы они возвращали разные результаты? - PullRequest
0 голосов
/ 25 января 2019

Я новичок в издевательствах в Узле.Я использую библиотеку Rewire, которая кажется одним из лучших вариантов.Я столкнулся с проблемой, когда мне нужно дважды смоделировать одну и ту же функцию в методе, чтобы они возвращали разные результаты:

const tourId: string = await redis.read(accessToken, false);
if (tourId === null) {
  logger.warn('invalid token', { accessToken });
  throw boom.notFound(codes.RECORD_NOT_FOUND);
}

logger.warn('found an access token', { tourId });

const tourResponse: string = await redis.read(tourId, false);
if (tourResponse === null) {
  logger.warn('tour not found', { accessToken, tourId });
  throw boom.notFound(codes.RECORD_NOT_FOUND);
}

В приведенном выше примере я дважды вызываю функцию redis.read().Для того, чтобы правильно получить тестовое покрытие, которое я хочу, мне нужно по-разному высмеивать эти два вызова, с которыми я борюсь.Вот тестовый пример, который у меня есть:

it('returns a 404 error if access token not found in redis', async () => {
  service.__set__({
    redis: {
      read: (accessToken: string): string | null => null,
    },
  });

  service.getHandler('12345').catch((result: boom) => {
    expect(result.isBoom, 'should be boom error').to.be.true;
    expect(result.output.payload.statusCode, 'should be 404 error').to.equal(404);
    expect(result.output.payload.message, 'should be RECORD_NOT_FOUND error').to.equal(codes.RECORD_NOT_FOUND);
    });
});

Любые советы приветствуются!

1 Ответ

0 голосов
/ 25 января 2019

Отвечая на мой собственный вопрос здесь: sinon.stub() имеет метод onCall(), который можно использовать для изменения вывода для: n-го вызова.

https://sinonjs.org/releases/latest/stubs/#stuboncalln-added-in-v18

it('returns an iTour instance if found in redis', async () => {
      const callback = sinon.stub();

      callback.onCall(0).returns('12345');
      callback.onCall(1).returns('67890');

      service.__set__({
        redis: {
          read: () => callback(),
        }
      });

      service.getHandler('12345').catch((result: boom) => {
        expect(result.isBoom, 'should be boom error').to.be.true;
        expect(result.output.payload.statusCode, 'should be 404 error').to.equal(404);
        expect(result.output.payload.message, 'should be RECORD_NOT_FOUND error').to.equal(codes.RECORD_NOT_FOUND);
      });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...