RequireJS和无头测试驱动开发

Spe*_*age 10 javascript tdd requirejs

我希望将RequireJS用于我的下一个大型JS项目,但是我很难确定如何在无头测试环境中测试它.我是RequireJS和测试驱动的编码方法的新手,所以任何对诺布友好的东西都会很棒.

thi*_*eek 5

您可以使用r.js从命令行测试RequireJS模块,以在Node中运行脚本.

然后,您可以使用Node模块(如assert)为自己创建测试套件.

这是一个非常简单的例子:

scripts/simple.js:

define({ name: 'Really simple module' });
Run Code Online (Sandbox Code Playgroud)

tests/test_simple.js:

require({ baseUrl: 'scripts' }, ['assert', 'simple'], function(assert, simple) {

    var test = function(callback) {
        var msg;
        try {
            callback();
        } catch (e) {
            msg = 'Failed: expected "' + e.expected + 
                  '" but got "' + e.actual + '" instead.';
        }
        if (!msg) {
            msg = 'Passed';
        }
        console.log(msg);
    };

    // This will pass
    test(function() {
        assert.equal(simple.name, 'Really simple module');
    });

    // This will fail
    test(function() {
        assert.equal(simple.name, 'Foo');
    });

});
Run Code Online (Sandbox Code Playgroud)

然后,您可以从项目的顶级目录运行测试:

node path/to/r.js test/test_simple.js
Run Code Online (Sandbox Code Playgroud)

你可能做得更好.断言模块只是您自己制作测试套件所需的基础.如果您不想自己动手,可以尝试使用CommonJS Test Runner之类的软件包,但请务必先阅读r.js文档.


Dom*_*nic 3

好的,这是我的想法。您应该只为自己的代码编写测试,而不是为第三方代码编写测试,因此无需测试 RequireJS 作为库是否正常工作。(他们有自己的测试,你应该相信。)

因此,您应该能够在测试中假设 RequireJS 正在工作。就像您假设parseInt有效、setTimeout有效、Math.min有效:这些开发人员有自己的测试,您不需要编写更多内容。

如果它不起作用(不太可能),或者如果您错误地使用它(可能性更大),那么您的测试应该会灾难性地失败:例如,您最终将调用不存在的对象上的方法。

考虑到这一点,您应该对各个 RequireJS 模块进行单元测试。为此,每个测试装置应该包含在require其被测系统模块的模块中,或者测试应该是异步的,并且作为测试的一部分,它们应该是require被测系统模块。再次,假设您返回了正确的模块:如果没有,即如果您滥用 RequireJS,测试将灾难性地失败。