简介
Jest 提供了一整套用于单元测试的工具,包括模拟在您的代码中导入的模块。本文介绍了如何在 Jest 中模拟 ES6 模块导入,解决测试模块依赖关系的挑战。
问题陈述
模拟模块导入允许开发人员隔离对其依赖模块执行测试时的特定模块。然而,Jasmine 中使用的 import 被 spies 替换的方法,由于测试环境不同,并不直接适用于 Jest。
解决方案
Jest 提供了import * 语法将模块中的所有导出作为单个对象导入。该技术可用于模拟 ES6 模块导入。
模拟命名导出
对于命名导出,只需使用 import * 导入模块,然后将导出的对象变异为模拟所需的函数:
// dependency.js export const doSomething = (y) => console.log(y);
// myModule.js import { doSomething } from './dependency'; export default (x) => { doSomething(x * 2); };
// myModule-test.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); }); });
模拟默认导出
对于默认导出,您可以使用 import moduleName from 'modulePath' 导入它们然后改变导入对象的默认值:
// dependency.js export default (y) => console.log(y);
// myModule.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 }); });
结论
使用 import * 语法并改变导出的对象,这是可能的在 Jest 中模拟 ES6 模块导入,使您能够测试模块的功能,同时隔离它们的依赖项。
以上是如何在 Jest 中模拟 ES6 模块导入?的详细内容。更多信息请关注PHP中文网其他相关文章!