在编写自动化系统/集成测试时,在所有测试“启动服务器”之前,第一步运行是很常见的。由于启动服务器可能很昂贵,因此希望这样做一次,而不是在每次单独测试之前。 JUnit has easy functionality for doing this. nodeunit中是否有等效的标准模式?还是需要手动滚动?
答案 0 :(得分:2)
我不认为Nodeunit有这种内置功能,但很多人都使用Grunt来处理这些任务。
答案 1 :(得分:2)
因为使用nodeunit的测试套件只是节点模块,所以您可以利用该闭包进行全局设置/拆卸(仅适用于该测试套件):
var myServer = require('./myservermodule');
var testsRun = 0;
var testsExpected = 3;
function startTest(test) {
test._reallyDone = test.done;
test.done = function() {
++testsRun;
test._reallyDone();
};
}
module.exports = {
'setUp' : function(cb) {
if (!myServer.server) myServer.start(cb);
else cb();
},
'tearDown' : function(cb) {
console.log("Tests run: " + testsRun + "/" + testsExpected);
if (testsRun===testsExpected) myServer.stop(cb);
else cb();
},
'sometest1' : function(test) {
startTest(test);
test.expect(1);
test.ok(true);
test.done();
},
'sometest2' : function(test) {
startTest(test);
test.expect(1);
test.ok(false);
test.done();
},
'sometest3' : function(test) {
startTest(test);
test.expect(1);
test.ok(true);
test.done();
}
};
答案 2 :(得分:1)
是的,Nodeunit有一个setUp()
和一个tearDown()
函数,它们总是在测试之前和之后运行。您可以使用setUp()
启动服务器,如下所示:
var server = require("path/to/server.js");
exports.setUp = function(callback) {
server.start(8080, function() {
callback();
});
};
// run your tests here, setUp will be called before each of them
这假设在server.js中你有:
exports.start = function() {
// start server here
}
tearDown()
函数在调用test.done()
后运行。
有关此示例,请在此处查看:[{3}}
答案 3 :(得分:0)
有两种方法可以做到这一点:
nodeunit测试文件中的所有测试都是按顺序和同步运行的。您可以在第一次测试中放置该组测试的设置代码,然后在最后一次测试中进行拆解。
如果你想更正式地做这件事,如果你不想为单元测试设置Grunt,那么还有一个名为“nodeunit-async”的模块,它可以让你运行全局设置和在所有测试之前和之后拆卸。您可以在一组测试之前和之后运行全局设置和拆解。
这是nodeunit-async的模糊:
用于运行异步nodeunit测试的轻量级包装器。当您希望在多个文件中为每个测试运行通用全局设置或拆卸功能时,特别有用,和/或夹具设置或拆卸功能在所有测试之前和之后运行一次。
专为使用async的auto和waterfall方法编写的单元测试而设计。