10

我希望将 RequireJS 用于我的下一个大型 JS 项目,但是我很难弄清楚如何在无头测试环境中对其进行测试。我对 RequireJS 和测试驱动的编码方法都是新手,所以任何对菜鸟友好的东西都会很棒。

4

2 回答 2

5

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

然后,您可以使用 Node 模块,如assert,为自己创建一个测试套件。

这是一个过于简单的例子:

scripts/simple.js

define({ name: 'Really simple module' });

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');
    });

});

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

node path/to/r.js test/test_simple.js

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

于 2011-06-21T20:29:44.860 回答
3

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

所以你应该能够在你的测试中假设 RequireJS 正在工作。就像你假设parseInt工作,setTimeout工作,Math.min工作一样:那些开发人员有自己的测试,你不需要写更多。

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

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

于 2011-06-02T17:16:32.673 回答