如何在 mocha 测试中存根 mongodb 的 addCursorFlag?

How can I stub mongodb's addCursorFlag in mocha test?

我有这段代码要进行单元测试:

    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();
    });

这有点棘手,但如果您观察 collection.find 之后的方法链接,您会调用 addCursorFlag,然后 returns 从您调用的地方调用 object stream 方法。您需要以类似的方式构建 collection 存根:

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')
        )}
      });