我尝试将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对所有要求/定义的子调用使用相同的上下文,或者是否有其他方法可以解决这个问题。
答案 0 :(得分:1)
更改模块定义,使其需要require
:
define(['require'], function (require) {
没有它,您可以使用全局require
。有了它,您可以使用具有适当上下文的require
。来自the documentation:
请注意"要求"被指定为模块的依赖项。这允许传递给函数回调的require()函数使用正确的上下文来正确加载模块以支持多版本支持。如果"要求"未指定为依赖项,则可能会出现错误。