是否可以使用require.js将not module*.js文件设置为依赖项



我们不使用require.js在js源代码上实现模块,但我想将其用于测试。还有一个问题:我无法实现原始的*.js文件作为其他模块的依赖项。有可能吗?

我的意思是:在它之后加载一些*.js文件和模块(以测试它)。

define的工作原理

我将require.js用于实现和测试。在使用define执行模块函数之前,您可以加载任何JavaScript文件作为依赖项

define(["test/myTest.js", "test/anotherTest.js"], function(test1, test2) {
// perform your tests
});

如何将requirejs与asyncTests一起使用

您也可以在之后加载代码,依赖项使用require加载到模块函数内部。我将它与QUnit一起使用。下面是我的代码中的一个示例。

首先,确保QUnit测试运行程序默认停止(这与其他测试框架类似)。通过这种方式,您可以定义何时运行测试(即在加载相关代码之后)。

QUnit.config.autostart = false

其次,您将测试定义为一个模块。模块加载依赖项,然后定义测试,然后加载要测试的代码。只有当代码是自执行的并且不能预先加载时,这才是必要的(在这种情况下,您可以直接使用define并完成它)。下面是我使用Chaplin库的示例(用CoffeeScript编写)。

define(['chaplin'], function(chaplin) {
asyncTest("publish startup complete event", function() {
chaplin.mediator.subscribe("startup~complete", function() {
ok(true, "startup~complete event fired");
});
return requirejs(['modules/startup/startup'], function() {
start();
});
});
});

重要的部分是最后一次requirejs调用。它在定义测试之后加载要测试的代码。

动态加载依赖项

编辑:回应评论假设存在一个名为config的模块,该模块包含配置数据。我也假设了某种格式,所以如果你的格式不同,你可能会做一些小的改变。不过,这些原则是正确的。

define(["config"], function(config) {
// assuming config.modules is an array of all development modules,
// config.devPath is the base bath to development modules,
requirejs(
config.modules.map(function(module){
return config.devPath + module
})
, function() {
// all modules loaded, now go on
// however, no reference to modules left, so need to work with `arguments` array
});
});

但是,您应该知道您在回调函数中丢失了对模块的引用。

最新更新