从一个错误存根返回一个错误存根



我有问题让一个sinon存根返回/解析另一个sinon存根。我用sinon, chai, chai-as-promise和摩卡。

我正在按顺序执行一些异步任务,我想测试的代码看起来像这样:

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"方法在终端中。原型,这就是为什么我需要在这里存根。当我尝试运行这个程序时,我得到了错误:

Unhandled rejection TypeError: undefined is not a function

return terminal.saveit();

但是如果我在控制台中转储终端对象,它看起来很好,就像任何其他存根对象一样(至少在我简单的头脑中)。存根的saveit()方法可以在测试中"独立"调用。但是每当我通过chai的"return"或chai-as-promise的"resolve"方法返回它时,我都会得到这个错误。

知道为什么会这样吗?

这一行:

findOneStub.resolves(saveitStub)

导致Terminal.findOneAsync返回一个存根函数,而不是一个终端实例。很明显,存根函数没有称为saveit的性质,尽管Terminal.prototype有。由于未知属性返回为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);

相关内容

  • 没有找到相关文章

最新更新