Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RequireJS和无头测试驱动开发_Javascript_Tdd_Requirejs - Fatal编程技术网

Javascript RequireJS和无头测试驱动开发

Javascript RequireJS和无头测试驱动开发,javascript,tdd,requirejs,Javascript,Tdd,Requirejs,我希望在下一个大型JS项目中使用RequireJS,但是我很难弄清楚如何在无头测试环境中测试它。我对RequireJS和测试驱动的编码方法都是新手,所以任何对noob友好的东西都会很棒 好的,这是我的想法。您应该只为自己的代码编写测试,而不是为第三方代码编写测试,因此不需要测试RequireJS,因为库可以正常工作。(他们有自己的测试,你应该相信。) 因此,您应该能够在测试中假设RequireJS正在工作。就像你假设的那样,parseInt有效,setTimeout有效,Math.min有效:开

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

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

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

如果它不起作用(不太可能),或者您使用它不正确(可能性稍大),那么您的测试将以灾难性的失败告终:例如,您将在不存在的对象上调用方法


考虑到这一点,您应该对您的各个RequireJS模块进行单元测试。为此,每个测试夹具都应该封装在一个模块中,该模块需要测试模块下的系统,或者测试应该是异步的,并且作为它们的一部分,它们应该需要测试模块下的系统。再一次,假设您得到了正确的模块:如果您没有,也就是说,如果您误用了RequireJS,测试将以灾难性的方式失败。

您可以从命令行测试RequireJS模块

然后,您可以使用节点模块(如)为自己创建一个测试套件

下面是一个过于简单的例子:

scripts/simple.js

define({ name: 'Really simple module' });
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');
    });

});
tests/test\u simple.js

define({ name: 'Really simple module' });
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模块只是使自己成为测试套件所需的基本部分。如果您不想使用自己的软件包,您可以尝试使用类似的软件包,但一定要先阅读文档。

我刚才在谷歌搜索之前不知道headless这个词,所以我可能弄错了,但我很难理解您选择的模块加载器与您的测试有什么关系。此外,测试驱动开发通常是通过单元测试完成的,而据我所知,“headless”这个形容词主要用于验收测试。正如我所说的,我对这一点还不熟悉,因此如果我混淆了问题中的一些细节,我道歉。对于无头测试,我使用了envjs和Jasmine。它完全是单元测试,只是从命令行开始,没有浏览器。比如,对于Rhino或Node.OK,那么在本文中“headless”只是指“no browser”吗?我想这是有道理的。在这种情况下,我想我可以尝试回答…不,等等,我不能,因为我仍然不明白模块框架与TDD有什么关系。为什么要“测试[RequireJS]”?这是否意味着要测试它的存在?如果是,您是否测试jQuery?仍然困惑:)是的,在没有浏览器的情况下是无头的。所有这些都来自命令行。我正在尝试为我的javascript web应用程序编写测试驱动代码。因为我使用的是RequireJS,所以我想进行测试,以确保模块正在加载,并且依赖于它们的所有后续事件都正确触发。RequireJS的开发人员使用Dojox来测试他的构建,我正在经历这一过程,看看我是否能理解它。但是,如果您有任何想法,请让我知道。因此,与测试使用RequireJS拉入模块然后编写测试来检查这些模块的机制不同,我可以使用测试套件中可用的任何方法来加载这些模块,然后从那里开始。相反,测试
require([jsfiles],function(){})我将使用
加载(jsfiles);载荷(jsfiles)以确保我的依赖项存在并正常工作。诸如此类的东西?好吧,我会在你的测试中使用RequireJS。也就是说,要么我的文本装置是一个RequireJS模块,要么我的每个测试中都有
require([jsfiles],function(){})
。如果有一种方法可以模拟它,而不必在测试中包含require语句,那就太好了。这样,如果我需要所需的js文件,我就不必改变两个位置。然而,这让我找到了正确的方向。谢谢很乐意帮忙!同样,我觉得如果您模拟
Math.min
setTimeout
,等等,您应该只模拟
require
:您应该将其视为“标准库”的一部分。