【发布时间】:2016-10-31 05:46:17
【问题描述】:
我的 node.js mocha 套件中的典型测试如下所示:
it("; client should do something", function(done) {
var doneFn = function(args) {
// run a bunch of asserts on args
client.events.removeListener(client.events.someEvent, userMuteFn);
done();
}
client.events.on(someEvent, doneFn);
client.triggerEvent();
});
这里的问题是,如果client.triggerEvent() 没有做正确的事情,或者如果服务器中断并且从不调用someEvent,那么done() 将永远不会被调用。这会给之前没有使用过测试套件的人留下一个模棱两可的错误,例如:
Error: timeout of 10500ms exceeded. Ensure the done() callback is being called in this test.
我的问题是,有没有一种方法可以重写这些测试,无论是使用 mocha 还是添加另一个库,都可以使这样的异步工作更容易遵循。我希望能够输出如下内容:
the callback doneFn() was never invoked after clients.event.on(...) was invoked
或者类似的东西。
我不确定使用诸如承诺之类的东西是否会对此有所帮助。对于异步/回调类型代码更有意义的错误消息将是一件好事。如果这意味着从回调/异步转移到另一个工作流,我也可以。
有哪些解决方案?
【问题讨论】:
-
可以澄清变量
client包含的内容。它是一个对象实例,还是一个使用child_process.fork()调用的模块,或者别的什么?那方面的错误是如何管理的?
标签: javascript node.js asynchronous mocha.js