首页 > web前端 > js教程 > 如何在 Jest 中使用 import * 模拟 ES6 模块导入?

如何在 Jest 中使用 import * 模拟 ES6 模块导入?

DDD
发布: 2024-10-24 05:22:02
原创
877 人浏览过

How to Mock ES6 Module Imports in Jest Using import *?

在 Jest 中模拟 ES6 模块导入

在 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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板