unit testingnodejs事件
我正在使用本答案中解释的解决scheme来解释我的节点应用程序中的unit testing事件。
但是,setTimeout函数永远不会调用,所以我的testing通过时,他们应该失败。
这里是一个例子:
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
callback来显示您的testing已完成。 像这样的东西:
suite('myTests', function() { test('myFunction_whenCalled_emitsEvent', function(done) { var myClass = new MyClass(); myClass.on('something', function() { done(); }); myClass.doSomething(); }); });
看起来你只是testing事件是否发射。 如果是这种情况,那么整个setTimeout
事物是不必要的。 摩卡本身会超时,如果没有默认超时(2000毫秒,如果我没记错的话)没有完成。
你的代码的设置方式,摩卡只会安排你的事件,然后退出testing。 由于排定事件成功,摩卡会称testing成功。