如何使用 Jest 模拟 ES6 导入
简介
在测试 ES6 模块时,您可能需要模拟导入依赖项的行为。虽然 Jasmine 提供了一种简单的方法,但 Jest 需要稍微不同的解决方案。
命名导出模拟
要模拟命名导出,您可以利用涉及 import * 的 hack。考虑以下模块:
<code class="js">// dependency.js export const doSomething = (y) => console.log(y);</code>
在您的生产模块中:
<code class="js">// myModule.js import { doSomething } from './dependency'; export default (x) => { doSomething(x * 2); };</code>
在您的测试中:
<code class="js">import myModule from '../myModule'; import * as dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { dependency.doSomething = jest.fn(); // Mutate the named export myModule(2); expect(dependency.doSomething).toBeCalledWith(4); }); });</code>
默认导出模拟
相同的黑客方法适用于默认导出:
<code class="js">// dependency.js export default (y) => console.log(y);</code>
<code class="js">// myModule.js import dependency from './dependency'; // Note the lack of curlies export default (x) => { dependency(x * 2); };</code>
<code class="js">import myModule from '../myModule'; import * as dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { dependency.default = jest.fn(); // Mutate the default export myModule(2); expect(dependency.default).toBeCalledWith(4); // Assert against the default }); });</code>
警告说明
虽然这种黑客方法有效,不建议这样做,因为它可能会导致测试中的副作用和不可预测的行为,特别是在测试无序执行的情况下。为了更强大和可靠的模拟,请考虑使用 jest.spyOn 或 jest.mock,如其他答案或更新的文档中的建议。
以上是如何在 Jest 中模拟 ES6 导入:综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!