由于导入 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/