我正在为使用RequireJS的应用程序编写一些测试。由于应用程序的工作方式,它希望通过调用require
来获取一些类。因此,对于测试,我有一些虚拟类,但我不想将它们放入单个文件中,仅用于此测试。我更喜欢在我的测试文件中手动define()
,如下所示:
define('test/foo', function () {
return "foo";
});
define('test/bar', function () {
return "bar";
});
test("...", function () {
MyApp.load("test/foo"); // <-- internally, it calls require('test/foo')
});
这里的问题是这些模块的评估会被延迟,直到脚本onload事件被触发为止。
来自require.js around line 1600:
//Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
我是否可以通过某种方式手动触发要评估的队列?
答案 0 :(得分:1)
到目前为止,我发现的最好的是异步需要模块:
define("test/foo", function () { ... });
define("test/bar", function () { ... });
require(["test/foo"], function () {
var foo = require('test/foo'),
bar = require('test/bar');
// continue with the tests..
});
答案 1 :(得分:0)
模块定义应限制为每个文件一个(参见here)。我猜想在单个文件中定义多个模块会破坏内部加载机制,这依赖于脚本的加载事件来确定它在解析依赖项时已准备就绪。
即使它只是用于测试,我建议将这些定义分成多个文件。
希望有所帮助!欢呼声。