如何在Sinon中存根一系列方法?

Dis*_*ive 10 javascript unit-testing sinon

我知道如何使用stub来替换一个函数.

sandbox.stub(Cars, "findOne",
            () => {return car1 });
Run Code Online (Sandbox Code Playgroud)

但是现在我在我的函数中有一行我想测试我需要看起来像这样的存根

Cars.find().fetch()
Run Code Online (Sandbox Code Playgroud)

所以这里有一系列功能,我不确定我需要做什么.如何存根"查找"以返回我可用于存根"获取"的内容?

dee*_*wan 14

恕我直言,我们可以用它returns来做到这一点.我们不需要使用callsFake或模拟它作为函数.

// Cars.find().fetch()

sinon.stub(Cars, 'find').returns({
  fetch: sinon.stub().returns(anything);
});
Run Code Online (Sandbox Code Playgroud)

万一,如果在fetch()之后还有另一种方法,我们可以使用returnsThis()

// Cars.find().fetch().where()

sinon.stub(Cars, 'find').returns({
  fetch: sinon.stub().returnsThis(),
  where: sinon.stub().returns(anything);
});
Run Code Online (Sandbox Code Playgroud)

参考:https: //sinonjs.org/releases/v6.3.3/

希望能帮助到你

  • 我如何断言 `fetch` 被调用了?`assert(Cars.find().fetch.CalledOnce)` 会起作用吗? (2认同)

apr*_*rok 9

试试这个:

sandbox.stub(Cars, "find", () => {
    return {
        fetch: sinon.stub().returns(anything);
    };
});
Run Code Online (Sandbox Code Playgroud)

  • 得到了`stub(obj,'meth',fn)已被删除,参见文档` (4认同)
  • 如果链条长于一个怎么办?`Car.createQueryBuilder().其中​​,().getMany()` (3认同)