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

标签 javascript unit-testing import ecmascript-6

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

相关文章:

Javascript 未在网站上加载?

javascript - 向 JavaScript 对象添加属性的不同方法

c# - 我应该使用回调还是引入公共(public)字段来帮助进行单元测试?

javascript - 为什么我的 Vue 单元测试无法识别函数?

java - 智能 : Cannot import classes from other modules in my project?

python - Intellij idea 无法识别 python 3 中本地类的导入

php - 将用户的输入存储到数据库中

c# - 如何在 Nunit Framework 的 Autofac 容器中更新已注册类的属性

r - 如何在R 2.15中阅读.jpeg

javascript - 制作一个像 window.confirm 这样的函数,根据按钮单击返回 true 或 false