乡绅.js在使用商店时不替换假依赖项
Squire.js not substituting fake dependency when using store
我正在尝试将Squire.js作为RequireJS的依赖加载器。 使用完全正常的 Web 浏览器运行单元测试。 我想用store
来处理我的模拟。 但无法阻止乡绅加载实际模块。
mock
工作正常:
define(['lib/squire'], function (squire) {
var injector = new squire();
injector
.mock('modules/dependency', {
run: function () {
console.log("fake dependency run");
}
})
.require(['modules/module-under-test'], function (module) {
module.run();
});
});
控制台输出
module under test loaded module-under-test.js:2
module under test run module-under-test.js:5
fake module run module-test.js:8
但是当我使用这样的store
时:
define(['lib/squire'], function (squire) {
var injector = new squire();
injector
.store('modules/dependency')
.require(['modules/module-under-test', 'mocks'], function (module, mocks) {
mocks.store["modules/dependency"] = {
run: function () {
console.log("fake dependency run");
}
};
module.run();
});
});
使用并运行真正的:
real dependency loaded dependency.js:2
module under test loaded module-under-test.js:2
module under test run module-under-test.js:5
real dependency run dependency.js:5
Squire在文档的首页上说这是可以的。 使用来自Github的最新版本的Squire.js,以及来自 requirejs.org 的最新RequireJS。 我做错了什么?
我没有看到你在第二个示例中调用 run 的位置,但我假设它是在分配给 mocks.store["modules/dependency"] 之后。
我认为这里的问题是您正在尝试存根整个依赖项,而不仅仅是运行方法。 此方法在第一种情况下有效,因为依赖项尚未解析。 在第二种情况下,待测模块已经引用了依赖关系。 因此,替换 Squire "存储"的副本没有任何作用。 我相信使用商店的正确方式如下:
mocks.store["modules/dependency"].run = function () {
console.log("fake dependency run");
};
简而言之,如果你想替换整个依赖项,那么这就是 mock 的用途。 存储仅允许您在受测代码访问依赖项的各个属性之前对其进行存根。(因此,如果被测代码要在加载时调用 run,而不是在测试调用时调用,您仍然需要使用 mock。
还有另一种方法,对于负载使用强制您使用 mock 的情况,但您只想在依赖项将解析为的值上存根几个属性。首先需要依赖关系,同时需要乡绅。存根您需要存根的方法。然后使用 mock 让 Squire 在解析被测模块的依赖项时使用部分存根依赖项。 在您的情况下,这看起来像:
define(['lib/squire', 'modules/dependency'], function (squire, dep) {
var injector = new squire();
dep.run = function () {
console.log("fake dependency run");
};
injector
.mock('modules/dependency', dep)
.require(['modules/module-under-test'], function (module) {
module.run();
});
});
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 我如何找到一个句子中的所有空格并替换忽略它们
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 如何用更合适的内容替换document.write
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 用空格替换下划线PHP
- str.split(someString).join(someOtherString)是否等效于替换
- 使用javascript的图像替换循环
- window.location替换并传递URL历史记录条目中的变量
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 替换标记中的属性
- 如何将本地依赖项添加到npm项目中
- 指令的模板必须只有一个根元素:With restrict E&替换true
- AngularJs对ng消息的自定义替换
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- 乡绅.js在使用商店时不替换假依赖项
- 将字符串中的正则表达式模式替换为依赖于匹配项的替换字符串
- 鲍尔:将最新的依赖版本替换为实际的依赖版本号