gpt4 book ai didi

node.js - Sinon stub 未正确恢复

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:44 24 4
gpt4 key购买 nike

我正在使用 mocha、chai 和 sinon 来测试我的 Node-express 代码。

我遇到了一个奇怪的问题,看起来 sinon 无法恢复 stub ,因此在下一个测试中我收到了已知错误

Attempted to wrap <method1> which is already wrapped

这就是我所做的

  • 我在测试用例中使用 mocha-steps 而不是 it() 子句,所以它们按顺序运行(我想确保它不是异步的竞争条件)
    • 我使用 sinon-test 自动清理 stub ,以防万一我做错了什么

这是一个测试用例:

step('should do stuff', test(function () {

const stub1 = sinon.stub(my_model1, 'method1');

chai.request(server)
.get('/endpoint')
.send(body)
.end(function (err, res) {
stub1.restore();
do_various_assertions(err, res);
});
}));

还有一个

step('should do other stuff', test(function () {

const stub1 = sinon.stub(my_model1, 'method1');

chai.request(server)
.get('/endpoint')
.send(slightly_different_body)
.end(function (err, res) {
stub1.restore();
do_various_assertions(err, res);
});
}));

我在哪里得到上面的错误

Attempted to wrap <method1> which is already wrapped

如果我注释掉第二种情况下的 stub 就可以正常工作。但为什么?我做错了什么?

最佳答案

下一步应该知道上一步已经完成,需要调用done函数。在您的示例中,第二步不会等待第一步,并且 method1 不会恢复。

step('should do stuff', function (done) {

const stub1 = sinon.stub(my_model1, 'method1');

chai.request(server)
.get('/endpoint')
.send(body)
.end(function (err, res) {
stub1.restore();
do_various_assertions(err, res);
done();
});
});

关于node.js - Sinon stub 未正确恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58724429/

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