在 Jasmine 中,模拟 ES6 模块导入非常简单。然而,在 Jest 中,该过程可能更具挑战性,尤其是在处理使用默认导出的模块时。本文探讨了如何使用简单的 import * hack 在 Jest 中模拟 ES6 模块导入。
传统上,模拟导入需要用 require 替换导入,并在测试中声明它们。这种方法可能是不可取的。
<code class="javascript">// undesirable approach import myModule from '../myModule'; import dependency from '../dependency'; describe('myModule', () => { // ... });</code>
相反,我们可以利用 import * 直接改变模块的导出,从而允许我们模拟所需的函数或默认导出。对于命名导出:
<code class="javascript">import * as dependency from '../dependency'; // ... dependency.doSomething = jest.fn(); // mutate the named export myModule(2); expect(dependency.doSomething).toBeCalledWith(4);</code>
同样,对于默认导出:
<code class="javascript">import * as dependency from '../dependency'; // ... dependency.default = jest.fn(); // mutate the default export myModule(2); expect(dependency.default).toBeCalledWith(4);</code>
虽然此方法提供了模拟 ES6 导入的解决方法,但必须注意它涉及更改导入的模块,这可能会在测试执行中引入副作用和潜在问题。因此,建议首选使用 Jest 的原生模拟方法,例如 jest.spyOn 或 jest.mock。
以上是如何在 Jest 中使用 import * 模拟 ES6 模块导入?的详细内容。更多信息请关注PHP中文网其他相关文章!