gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:17:56 25 4
gpt4 key购买 nike

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

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。我做错了什么?

最佳答案

在第二个示例中我没有看到您在哪里调用运行,但我假设它是在分配给 mocks.store["modules/dependency"] 之后。

我认为这里的问题是您试图 stub 整个依赖项,而不仅仅是运行方法。这种方法适用于第一种情况,因为依赖关系尚未解决。在第二种情况下,被测模块已经具有对依赖项的引用。因此,替换 Squire 已“存储”的副本没有任何作用。我相信使用商店的正确方式如下:

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

简而言之,如果您想替换整个依赖项,那么这就是 mock 的用途。 Store 仅允许您在被测代码访问之前 stub 依赖项的各个属性。 (因此,如果被测代码是在加载时调用运行,而不是在测试调用时调用,您仍然需要使用 mock。)

对于 use-upon-load 强制您使用 mock 但您只想在依赖项将解析为的值上 stub 的几个属性的情况,还有另一种方法。首先在需要 Squire 的同时需要依赖项。 stub 您需要 stub 的方法。然后使用 mock 让 Squire 在解析被测模块的依赖项时使用部分 stub 的依赖项。在您的情况下,这看起来像:

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

关于javascript - Squire.js 在使用商店时不替换假依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19969583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com