gpt4 book ai didi

javascript - 单元测试 nodejs 事件

转载 作者:行者123 更新时间:2023-11-30 17:39:27 25 4
gpt4 key购买 nike

我正在使用 this answer 中解释的解决方案在我的 Node 应用程序中对事件进行单元测试。

但是,setTimeout 函数从不调用,所以我的测试在应该失败的时候通过了。

这是一个例子:

suite('myTests', function() {
test('myFunction_whenCalled_emitsEvent', function() {
var myClass = new MyClass();
var eventTimeout = setTimeout(function() {
assert(false);
}, 1000);
myClass.on('something', function() {
clearTimeout(eventTimeout);
});
myClass.doSomething(); // this does not emit the 'something' event
});
});

只要未引发“某事”事件,我预计这会在 1 秒后失败。

我在 assert(false) 行中放置了一个断点,它永远不会被击中。

有人能指出我正确的方向吗?谢谢。

最佳答案

您必须使用done 回调来表明您的测试已完成。像这样:

suite('myTests', function() {
test('myFunction_whenCalled_emitsEvent', function(done) {
var myClass = new MyClass();
myClass.on('something', function() {
done();
});
myClass.doSomething();
});
});

看起来您只是在测试事件是否已发出。如果是这种情况,那么整个 setTimeout 就没有必要了。如果没有默认超时(2000 毫秒,如果我没记错的话)done,Mocha 将自身超时。

按照您设置代码的方式,Mocha 只会安排您的事件,然后退出测试。由于安排事件成功,Mocha 将调用测试成功。

关于javascript - 单元测试 nodejs 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383447/

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