gpt4 book ai didi

javascript - 从 sinon stub 返回 sinon stub

转载 作者:行者123 更新时间:2023-11-28 06:58:27 27 4
gpt4 key购买 nike

我在获取一个 sinon stub 来返回/解析另一个 sinon stub 时遇到问题。我正在使用 sinon、chai、chai-as-promised 和 mocha。

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

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

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

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

“saveit”方法位于 Terminal.prototype 中,这就是为什么我需要在那里 stub 它。当我尝试运行此程序时,出现错误:

Unhandled rejection TypeError: undefined is not a function

在行:

return terminal.saveit();

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

知道为什么会出现这种情况吗?

最佳答案

这一行:

findOneStub.resolves(saveitStub)

导致 Terminal.findOneAsync 返回 stub 函数,而不是终端实例。显然, stub 函数没有名为 saveit 的属性,尽管 Terminal.prototype 有。由于未知属性返回为 undefined,因此您会尝试将 undefined 作为函数调用。

要进行这样的测试,您最好构建一个 Terminal 实例并 stub 其 saveit 方法。如果由于某种原因构建实例太困难,您可以使用sinon.createStubInstance。由于我不知道您的构造函数的签名,因此我将继续作为示例:

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

关于javascript - 从 sinon stub 返回 sinon stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32361653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com