如何递归设置RequireJS上下文

时间:2014-09-08 10:24:45

标签: javascript unit-testing requirejs

我尝试将Jasmine测试添加到我的Marionette应用程序中,方法是为每个测试创建一个特定的上下文,其中包含一个地图,除了正在测试的模块之外,用mocks替换所有依赖项(如下所述:http://bocoup.com/weblog/effective-unit-testing-with-amd/ )。

mockRequire = requirejs.config({
    map: {
        '*': {
                'dep1': '../mocks/dep1'
             }
    }
});
mockRequire(['appTest'], function(){...})

然而,由于我的模块appTest有一个嵌套调用,要求上下文丢失:

//appTest.js
define([],
    function () {
        ...
        require(['dep1'], function (dep1) {
             //Here is not the mocked dep1 but the real one.
        })
    }
);

所以问题是我如何告诉requirejs对所有要求/定义的子调用使用相同的上下文,或者是否有其他方法可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

更改模块定义,使其需要require

define(['require'], function (require) {

没有它,您可以使用全局require。有了它,您可以使用具有适当上下文的require。来自the documentation

  

请注意"要求"被指定为模块的依赖项。这允许传递给函数回调的require()函数使用正确的上下文来正确加载模块以支持多版本支持。如果"要求"未指定为依赖项,则可能会出现错误。