繁体   English   中英

从sinon存根返回sinon存根

[英]Returning a sinon stub from a sinon stub

我在获取sinon存根以返回/解决另一个sinon存根时遇到问题。 我正在使用sinon,chai,chai-promise和mocha。

我正在按顺序执行许多异步任务,并且我要测试的代码如下所示:

Terminal.findOneAsync({terminalId: terminalId}).then(function(terminal) {
  terminal.lastSeen = timestamp;
  return terminal.saveit();
}).then(function(terminal) {
 //continue to do other stuff
});

我为此创建存根的尝试如下所示:

var saveitStub = sinon.stub(Terminal.prototype, 'saveit');
saveitStub.resolves(terminalUpdated);
var findOneStub = sinon.stub(Terminal, 'findOneAsync');
findOneStub.resolves(saveitStub);

“ saveit”方法位于Terminal.prototype中,这就是为什么我需要在此处存根的原因。 当我尝试运行此命令时,出现错误:

Unhandled rejection TypeError: undefined is not a function

在行:

return terminal.saveit();

但是,如果我将终端对象转储到控制台中,则看起来就像其他任何存根对象一样(至少在我看来很简单)。 在测试中,存根saveit()方法可称为“独立”。 但是每当我通过chai的“ return”或chai-promised的“ resolve”方法将其返回时,都会出现此错误。

知道为什么会这样吗?

这行:

findOneStub.resolves(saveitStub)

导致Terminal.findOneAsync返回存根函数,而不是Terminal实例。 显然,即使Terminal.prototype确实存在,存根函数也没有名为saveit属性。 由于未知属性返回为undefined ,因此在您尝试将undefined作为函数调用时结束了。

为了进行这样的测试,您最好构造一个Terminal实例,然后对它的saveit方法进行存根。 如果出于某种原因构造实例太困难,则可以使用sinon.createStubInstance 由于我不知道构造函数的签名,因此我将继续进行示例:

var terminal = sinon.createStubInstance(Terminal);
var saveitStub = terminal.saveit
saveitstub.resolves(terminalUpdated)
var findOneStub = sinon.stub(Terminal, 'findOneAsync')
findOneStub.resolves(terminal);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM