在节点单元中的测试套件之前运行设置代码

时间:2014-01-22 21:08:47

标签: node.js integration-testing nodeunit

在编写自动化系统/集成测试时,在所有测试“启动服务器”之前,第一步运行是很常见的。由于启动服务器可能很昂贵,因此希望这样做一次,而不是在每次单独测试之前。 JUnit has easy functionality for doing this. nodeunit中是否有等效的标准模式?还是需要手动滚动?

4 个答案:

答案 0 :(得分:2)

我不认为Nodeunit有这种内置功能,但很多人都使用Grunt来处理这些任务。

http://gruntjs.com/

答案 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}}

文档在这里:https://github.com/jamesshore/Lessons-Learned-Integration-Testing-Node/blob/master/src/_server_test.js

答案 3 :(得分:0)

有两种方法可以做到这一点:

  1. nodeunit测试文件中的所有测试都是按顺序和同步运行的。您可以在第一次测试中放置该组测试的设置代码,然后在最后一次测试中进行拆解。

  2. 如果你想更正式地做这件事,如果你不想为单元测试设置Grunt,那么还有一个名为“nodeunit-async”的模块,它可以让你运行全局设置和在所有测试之前和之后拆卸。您可以在一组测试之前和之后运行全局设置和拆解。

  3. 这是nodeunit-async的模糊:

      

    用于运行异步nodeunit测试的轻量级包装器。当您希望在多个文件中为每个测试运行通用全局设置或拆卸功能时,特别有用,和/或夹具设置或拆卸功能在所有测试之前和之后运行一次。

         

    专为使用async的auto和waterfall方法编写的单元测试而设计。

    https://github.com/Zugwalt/nodeunit-async