gpt4 book ai didi

javascript - 如果它们是只读的,我如何模拟 ES6 导入的模块?

转载 作者:行者123 更新时间:2023-12-02 05:16:35 26 4
gpt4 key购买 nike

由于导入 ES6 模块会为您提供该模块的只读 View ,模拟它会产生错误 'x' is read-only。这阻止了我通过破坏其依赖性来隔离被测代码。我不确定如何解决这个问题。

http://exploringjs.com/es6/ch_modules.html

*我会抛出一个 Plunker 但我无法让它识别 import 语句,而且 JSFiddle 似乎不允许其他文件,这些文件本来是用于导出模块的.

最佳答案

如果您正在使用 sinon,我的建议是停止使用它。他们不支持模拟只读模块并且对这个话题非常激进 https://github.com/sinonjs/sinon/issues/1711

另一方面,使用 jest,您可以像这样轻松模拟 ES6 只读模块:

const myMockedModule = {
...jest.requireActual('my-es6-readonly-module'),
theFunctionIWantToMock: jest.fn(),
}
jest.mock('my-es6-readonly-module', () => myMockedModule);

你需要把它放在规范的第一行。使用这种方法,您可以模拟任何模块中的任何直接导出项,即使它是只读的,因为 jest 拦截了 require 方法。这对于 mocha 也不太实用,因为 mocha 在同一进程中加载​​所有测试,而其他一些测试套件可能会直接或间接加载您想要模拟的模块,这会搞砸您的测试. Jest 是要走的路,因为它在单独的进程中加载​​每个规范,制定一个规范不会干扰另一个规范,因此这种模拟方法变得可行。

关于javascript - 如果它们是只读的,我如何模拟 ES6 导入的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41432719/

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