【发布时间】:2015-10-13 00:09:05
【问题描述】:
我正在尝试为我的普通 Express 应用编写一些基于 Vows 的测试。
这里是测试源:
var vows = require('vows');
var assert = require('assert');
var startApp = require('./lib/start-app.js');
var suite = vows.describe('tournaments');
suite.addBatch({
"When we setup the app": {
topic: function() {
return startApp();
},
teardown: function(topic) {
if (topic && topic.close) {
topic.close();
}
},
"it works": function(topic) {
assert.isObject(topic);
}
}
});
suite.run();
这里是start-app.js:
var app = require('../../app.js');
function start() {
var server = app.listen(56971, 'localhost');
return server;
}
module.exports = start;
app.js 导出使用express() 创建的常规 Express.js 应用。
问题是每当我运行测试时,topic.close() 在拆卸功能中不起作用,并且测试成功后永远挂起。我尝试在网上搜索并添加大量console.logs,但均无济于事。
我使用的是 Windows x64 版本的 Node.js 4.2.0,我使用的是 assert@1.3.0 和 vows@0.8.1。
知道如何让我的测试停止挂起吗?
【问题讨论】:
-
同样的问题,在 Travis 上构建的测试将永远运行。你找到解决办法了吗?
-
@FernandoPiancastelli 我从来没有找到合适的解决方案,但作为一个肮脏的黑客,在
topic对象上调用.unref()来“修复”这个问题。我怀疑某处存在错误,可能在 Node 核心中......