首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jest.mock of ES6类生成ReferenceError: require未定义

jest.mock of ES6类生成ReferenceError: require未定义
EN

Stack Overflow用户
提问于 2020-10-28 23:14:08
回答 1查看 5.1K关注 0票数 5

我试图在我的ES6 javascript项目中使用jest创建一个自动模拟。

我使用节点v15.0.1,并在ubuntu 18.04.5上使用26.6.0

我有一个包含以下代码的测试文件:

代码语言:javascript
复制
import RenderBuffer from './renderbuffer.js'

jest.mock('./renderbuffer.js');

beforeEach(() => {
    RenderBuffer.mockClear();
});

当我运行测试时,会遇到以下问题:

代码语言:javascript
复制
ReferenceError: require is not defined

      4 | 
      5 | beforeEach(() => {
    > 6 |     RenderBuffer.mockClear();
        |       ^
      7 | });
      8 | 

这个错误让我感到惊讶,因为我没有使用require语句。

我的package.json配置包含以下内容:

代码语言:javascript
复制
"type": "module",
    "main": "src/index.js",
    "devDependencies": {
        "jest": "^26.5.3",
        "jest-canvas-mock": "^2.3.0"
    },
    "jest": {
        "setupFiles": ["jest-canvas-mock"]
    },
    "scripts": {
        "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
        "test-coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage"
    }

对于这个问题的根源有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-11-03 12:53:44

您必须禁用任何源代码转换,以便通过设置

代码语言:javascript
复制
{
  transform: {}
}

在Jest配置文件中。默认情况下,转换选项被配置为使用babel-jest。请参考这个Jest文档部分了解更多详细信息。还请注意,您应该显式导入jest

代码语言:javascript
复制
import { jest } from '@jest/globals';

不幸的是,它仍然有一些问题运行您的测试,正如其他评论者已经提到的。也许,为了支持ESM支持,应该使用跟进这个问题来跟踪Jest中所做的更改。

例如,我当时不太幸运地模拟静态模块导入(26.6.2版):

嘲笑(不要)嘲弄 由于ESM在评估模块时有不同的“阶段”,所以jest.mock将不适用于静态导入。不过,它可以用于动态导入,因此我认为我们只需在文档中清楚地了解它支持什么和不支持什么。 jest.mock调用是挂起的,但这对ESM没有帮助。我们可能会考虑将import 'thing‘转换为import('thing'),这应该允许提升工作,但是它是异步的。使用顶级的等待可能是这种方法的必要。我也认为这有足够的侵略性,可以单独选择。需要讨论的是-我们不需要支持jest.mock在初始版本中所能提供的所有内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64582674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档