我似乎无法将before
Hook变为异步。
我已经使用了一个before
钩子来启动它,但它确实会在它失败时尝试拾取,这样我就可以失败/跳过整个块(因为没有要测试的服务器)。
我在整个代码中都使用了[async] before
挂钩,但在这种情况下,它并没有等待我的done
被解雇。
基本上,得到了一堆MochaJS测试,对于一个块,我需要启动一个Web服务器,以便我可以使用它来测试RESTful API。我想确保它成功启动,因此是异步方法。
describe('RESTful Tests', function(){
// Start up the whole express server for these API tests
before(function(done) {
try {
server.on('error', (e) => {
console.error("HERE");
done();
});
listener = server.listen(port, function() {
console.log("Server Started");
done();
});
console.error("AFTER LISTEN");
} catch(err) {
console.error("ON Caught");
done();
}
console.error("At End!!");
});
这会运行,并在测试中显示为1) "before all" hook
,但它不会等待done
被调用。我只是得到了输出......
RESTful Tests
AFTER LISTEN
At End!!
1) "before all" hook
其他所有项目都没有出现,但我会得到一个关于EADDRINUSE
的异常(预计会阻止端口)。我真的很难找到解决这个问题的方法。
我理解它是在一个不同的(有点)“线程”中,所以我不会接收错误,但仍然...... 为什么不遵循异步done
方法?
答案 0 :(得分:0)
似乎有些文件有点误导......
Node / ExpressJS文档状态,用于将.on('error'
方法放在server
对象上。在这种情况下似乎需要在listener
对象上!
所以我的最终[工作]代码看起来像这样......
listener = server.listen(port, function() {
done();
}).on('error', (function(e) {
this.skip(e.code);
done();
}).bind(this));
耶!!! :)