Как я могу заглушить addCursorFlag mongodb в тесте мокко? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть этот код для модульного тестирования:

    collection.find({
      result: { $exists: false }
    }, {
      timeout: false,
      maxTimeMS: 1800000,
    })
      .addCursorFlag('noCursorTimeout', true)
      .stream()
        .
        .
        .

Как я могу заглушить деталь .addCursorFlag('noCursorTimeout', true) с помощью sinon? Вот модульный тест, который работал до добавления в addCursorFlag:

      collectionStub.find = sinon.stub().returns({
        stream: () => new mocks.stream.ReadableMock(false, null, 'mongo error')
      });

      jobRunner.on('error', (updatedJob) => {
        expect(updatedJob).to.deep.equal({
          ...job,
          status: 'error',
          error: 'mongo error',
        });

        done();
      });

      jobRunner.run();
    });

1 Ответ

0 голосов
/ 08 ноября 2019

Это довольно сложно, но если вы наблюдаете цепочку методов после collection.find, у вас есть вызов addCursorFlag, который затем возвращает объект, откуда вы вызываете метод stream. Вы должны структурировать свою коллекционную заглушку аналогичным образом:

collectionStub.find = sinon.stub().returns({
        // addCursorFlag is a function that returns an object
        addCursorFlag: () => ({
          // stream is a method in the returned object 
          stream: () => new mocks.stream.ReadableMock(false, null, 'mongo error')
        )}
      });
...