9

我正在为使用 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 事件。

第 1600 行的 require.js 开始

//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]);

有什么方法可以手动触发要评估的队列吗?

4

2 回答 2

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..
});
于 2012-01-16T18:20:08.447 回答
0

模块定义应限制为每个文件一个(参见此处)。我猜想在单个文件中定义多个模块会破坏内部加载机制,该机制依赖于脚本的加载事件来确定它在解决依赖关系时已准备好。

即使只是为了测试,我建议将这些定义拆分为多个文件。

希望有帮助!干杯。

于 2012-01-16T14:19:10.987 回答