我正在尝试为我的普通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.log
个,但都无济于事。
我使用的是Node.js 4.2.0的Windows x64版本,我正在使用assert@1.3.0
和vows@0.8.1
。
知道如何让我的考试停止吗?
答案 0 :(得分:1)
以下是我在一个项目中解决问题所做的工作:最后一批只是为了关闭服务器。
suite.addBatch({
'terminate server': {
topic: function() {
server.close(this.callback); // this is a regular node require(`http`) server, reused in several batches
},
'should be listening': function() {
/* This test is necessary to ensure the topic execution.
* A topic without tests will be not executed */
assert.isTrue(true);
}
}
}).export(module);
在添加此测试之前,套件永远不会结束执行。您可以在https://travis-ci.org/fmalk/node-static/builds/90381188
查看结果