首页 > web前端 > js教程 > 正文

如何在 Jest 中模拟 ES6 模块导入?

Barbara Streisand
发布: 2024-10-23 22:31:30
原创
810 人浏览过

How to Mock ES6 Module Imports in Jest?

在 Jest 中模拟 ES6 模块导入

简介

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

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!