javascript – Squire.js在使用商店时不会替换假依赖

前端之家收集整理的这篇文章主要介绍了javascript – Squire.js在使用商店时不会替换假依赖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试将Squire.js作为RequireJS的依赖加载器.使用完全正常的Web浏览器运行单元测试.我想用商店来处理我的嘲笑.但无法阻止Squire加载实际模块.

模拟工作正常:

@H_403_7@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(); }); });

控制台输出

@H_403_7@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

但是当我使用这样的商店时:

@H_403_7@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(); }); });

使用和运行真实的:

@H_403_7@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”]的赋值之后.

我认为这里的问题是你试图存根整个依赖,而不仅仅是run方法.这种方法适用于第一种情况,因为依赖性尚未解决.在第二种情况下,被测模块已经引用了依赖性.因此,替换Squire已经“存储”的副本什么都不做.我相信使用商店的正确方式如下:

@H_403_7@mocks.store["modules/dependency"].run = function () { console.log("fake dependency run"); };

简而言之,如果您想要替换整个依赖项,那么这就是mock的用途. Store仅允许您在受测试代码访问依赖项之前对其进行存根. (因此,如果测试中的代码在加载时调用run,而不是在测试时调用,则仍需要使用mock.)

有一种替代方法,对于使用on-load强制您使用mock的情况,您只想在依赖关系可以解析的值上存储一些属性.首先需要依赖,同时你需要Squire.存根需要存根的方法.然后使用mock让Squire在解析被测模块的依赖关系时使用部分存根的依赖关系.在您的情况下,这将看起来像:

@H_403_7@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(); }); });
原文链接:https://www.f2er.com/js/429842.html

猜你在找的JavaScript相关文章