ES6 类的 jest.mock 产生 ReferenceError: require is not Defined

2023-11-25

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

我正在使用节点v15.0.1,还有开玩笑26.6.0在Ubuntu上18.04.5.

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

import RenderBuffer from './renderbuffer.js'

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

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

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

ReferenceError: require is not defined

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

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

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

"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"
    }

关于这个问题的根本原因是什么有什么想法吗?


您必须禁用任何源代码转换才能通过设置使其工作

{
  transform: {}
}

在你的 Jest 配置文件中。默认情况下转换选项配置为使用babel-jest。请参阅这个 Jest 文档部分更多细节。另请注意,您应该导入jest明确地:

import { jest } from '@jest/globals';

不幸的是,正如其他评论者已经提到的那样,运行测试时仍然可能存在一些问题。也许,一个人应该关注这个问题持续跟踪 Jest 中为 ESM 支持所做的更改。

例如,我目前不幸模拟静态模块导入(版本26.6.2):

开玩笑。(do|un)mock

由于 ESM 在评估模块时有不同的“阶段”,因此 jest.mock 不适用于静态导入。不过它可以用于动态导入,所以我认为我们只需要在文档中明确它支持什么和不支持什么。

jest.mock 调用被提升,但这对 ESM 没有帮助。我们可能会考虑将 import 'thing' 转换为 import('thing') ,这应该允许提升工作,但它是异步的。使用顶级等待可能是这种方法的必要条件。我还认为它的侵入性足以保证一个单独的选择。需要讨论的事情 - 我们不需要支持 jest.mock 初始版本所能提供的一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 类的 jest.mock 产生 ReferenceError: require is not Defined 的相关文章

  • 为什么 setInterval 会无限循环

    我正在尝试设置一个计时器 以便它显示用户的秒数和分钟剩余时间 并且我正在使用setInterval获取秒数 如果有 60 秒 则会从用户处减少 1 分钟 问题是我变得无限for每次我尝试这样做时都会循环 就像是 var userObj na
  • 使用 Javascript/Web Audio API 访问/处理系统音频

    是否可以使用 Web Audio API 访问系统音频 以便对其进行可视化或应用均衡器 看起来可以将系统音频连接到 Web Audio API 可以访问的输入设备 即Web Audio API 获取声卡的输出 https stackover
  • 如何将函数处理程序从控制器传递到 AngularJs 中的指令隔离范围?

    我在控制器中有以下功能 angular module app controller BodyController function this click function message alert message 我想将此函数传递到指令的
  • 之后的脚本会阻止 DOM 加载

    考虑以下代码 div class box div 令我惊讶的是 DOM 延迟了十秒的加载 10秒后出
  • Bootstrap 按钮的检查状态

    我想在 Bootstrap 3 0 2 中设置组复选框的选中状态 docs http getbootstrap com javascript buttons html div class btn group div
  • 嵌套 .ajax() 调用的 JavaScript/jQuery 变量作用域问题

    我很难传递变量postData这是一个嵌套子级的序列化 jQuery 数组对象 ajax call postData成功传递给第一个 ajax 打电话 但是当我尝试在第二次使用它时 ajax 调用时 它不会发布任何表单元素 因为变量在该级别
  • Mat select - 获取selectionChange的旧值

    我有一个项目 其中有一个包含以下内容的表单mat select选择器 每当用户更改输入时 我都会向用户显示一个对话框来确认此操作 现在 The selectionChange 通知值何时更改并将新值传递为 event 当用户取消对话框时 有
  • 考虑使用“jsdom”测试环境

    我有这个简单的测试 import React from react import render from testing library react import Button from describe Button gt it rend
  • 热成像调色板

    自热成像早期以来 红外热像仪经常使用独特的调色板 从黑色到蓝色 品红色 橙色 黄色到亮白色 这个调色板通常被称为Iron or Ironbow 这是使用前视红外相机拍摄的图像的典型假彩色可视化 来源 维基百科 术语科特 http commo
  • 如何使用 file:///F:/foldername 访问 ajax 中的本地文件夹?但它适用于 http://

    在这里 我使用以下代码使用 AJAX jQuery 动态创建文件名列表 window load function var fileExt csv document ready function ajax url file F foldern
  • 为什么此 Firebase 可调用函数不返回值?

    我有一个应返回值的可调用函数 但唯一返回的是 null 以下是该功能的当前版本 我也尝试过回报第一个承诺 原来的once调用 最后在另一个then返回 GUID 在这种情况下它实际上返回了数据 但它立即返回并且 GUID 为空 我怎样才能实
  • 禁用 HTML 验证。如何为全局每个表单设置“novalidate”?

    我想知道是否可以做一些事情来禁用应用程序中每个表单的 HTML 验证 有什么办法可以做到这一点或者我应该添加novalidate每个表单标签的属性 看来唯一的方法是添加novalidate使用 JavaScript jQuery 为每个表单
  • 玩笑错误反应组件上出现意外标记

    我收到了意外的令牌React Component Name在跑步的时候npm test 尝试阅读其他几个类似的问题 但似乎没有一个对我有用 我在下面添加了 babelrc package json 和我的测试文件内容的内容 presets
  • 使用添加“title”属性换行符 到 JSX 元素

    我知道我可以在 HTML 中添加换行符title属性使用 10 但 React 避免了这一点 例如 这是一个 React 组件 其中包含一个标准的 未由 React 处理的组件title包含换行符的属性 并且可以在浏览器中看到效果 但是如果
  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 将 ngModel 绑定到自定义指令

    所以我已经在这个问题上工作了一个星期了 但我似乎无法理解整个指令的事情 我读了很多帖子 揭秘指令 http www toptal com angular js angular js demystifying directives 指令 ht
  • 以编程方式在 Highcharts 中使用缩放绘制矩形和线条

    我正在使用 Highcharts 进行一些编程绘图Highcharts Renderer http api highcharts com highcharts Renderer using path and rect 在下面的代码中 我手动
  • 单击行内的按钮时防止触发表行 onclick 事件

    我有一个带有 ONCLICK 事件的表行 切换下面的附加数据 在其中一个行单元格内有一个按钮 单击时执行 AJAX 操作 当我单击按钮时 行的 onclick 事件也会触发 并且会发生附加数据在 AJAX 调用完成之前出现 这对我来说是一个
  • 如何使用 Firebase Cloud Functions 在 DataSnapshot 中查找特定值

    我正在尝试创建一个云函数 该函数将在 HTTP 请求 在计时器上发送 上触发 这将删除具有特定值的所有子项 数据库节点如下所示 activities 4GI1QXUJG0MeQ8Bq19WOdCQFo9r1 uid activity ham
  • iOS 上 Safari 中的 shift 键

    有没有办法在javascript中判断手机键盘上是否按下了shift键 并将其与大写锁定 按两次shift键 区分开来 一些事实 首先 让我们看一下有关 iOS 键盘的一些事实 我假设您已经知道了 当您进入键盘模式时 shift键始终处于激

随机推荐

  • python 列表中“not”运算符的奇怪行为

    当我尝试使用 python 检查列表是否为空时not操作员它的行为方式很奇怪 我尝试使用not运算符检查列表是否为空 gt gt gt a gt gt gt not a True gt gt gt not a True True gt gt
  • 是否可以在 asp.net web api 中将模型与上传文件绑定?

    该模型 public class UploadFileModel public int Id get set public string FileName get set public HttpPostedFileBase File get
  • React 16 中的类与类名

    我看到 React 16 允许将属性传递到 DOM 那么 这意味着可以使用 class 来代替 className 对吧 我只是想知道除了向后兼容以前版本的 React 之外 仍然使用 className 是否还有其他优点 class是 j
  • 为什么访问 Activity 内 Fragment 的 TextView 会抛出错误

    MainActivity class all necessary imports public class MainActivity extends AppCompatActivity implements NavigationView O
  • JPA中CascadeType.REMOVE和orphanRemoval有什么区别?

    有什么区别 OneToMany cascade REMOVE mappedBy customer public List
  • 使用 Ember (cli) 如何进行验收测试以等待承诺?

    在我的 Ember 应用程序中 我目前有一个模型findResults返回一个承诺的函数 该承诺包装了 Google Places 库以获取自动完成的结果 为了在我的 UI 中使用它 我设置了一个 PromiseMixin 控制器 我指示控
  • Selenium Python:如何在弹出窗口中向下滚动

    我正在从事 Linkedin 网络抓取项目 我正在尝试获取某人感兴趣的公司列表 请注意 我没有使用 API 这是一个动态网站 因此我需要向下滚动 同时抓取公司名称 我知道如何在主窗口中执行此操作 但由于兴趣是一个弹出窗口this滚动不起作用
  • 如何获取设备型号? [复制]

    这个问题在这里已经有答案了 如何获取设备型号名称 我有一台 Yuphoria 5010 设备型号中显示 YU5010 我想获取设备的全名 我想要获取下面给出的确切字符串 尤佛利亚 5010 6 0 棉花糖 其实很简单 只需要调用 Strin
  • 当我退出程序时以编程方式关闭 GPS

    我已经通过编程方式启动了我的 GPS 意图 myIntent 新意图 Settings ACTION SECURITY SETTINGS mContext startActivity myIntent 当我退出程序时如何关闭 GPS 尝试这
  • RIA 服务 OData“不允许查询选项。”

    我有一个由 RIA 自动创建的 OData 端点 它似乎适用于简单的 获取 查询 E g http xxx Service BusinessApplication1 Web DomainService1 svc odata ProductS
  • 使用 $ORIGIN 指定 ELF 二进制文件中的解释器不起作用

    我在用着patchelf修改 rpath 和已编译二进制文件的解释器 对 patchelf 的调用如下所示 patchelf set interpreter ORIGIN lib ld linux x86 64 so 2 set rpath
  • 转储 ChartJS 数据中缺失的日期

    假设我将使用 ChartJS 中的折线图 并且我有 按日期计算的值 数据 例子 5 05 11 2014 10 04 11 2014 55 01 11 2014 该图表将包含 3 个点 有没有任何解决方案 配置可以让我自动添加 转储 缺失日
  • 编写 repr 方法

    情况 我是Python新手 目前正在尝试学习诀窍 我尝试创建一个链表类来帮助更好地理解该语言及其结构 我知道 repr 函数基本上应该返回相同的东西 str 但我不确定实际的区别是什么 到目前为止 这是我的课程 class LinkedLi
  • 如何声明多个变量?

    这是字母 letters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 我用这个列出了它的清单 chars for i in letters chars app
  • 将文本安全转换为 XML

    我的 SQL Server 2005 数据库中有超过一百万行 其中一个文本列包含 XML 字符串 我想将文本转换为 XML 数据类型 以便提取部分数据 问题是有些记录在转换时会抛出错误 即无效的 XML 如何忽略这些错误 以便正确转换所有有
  • 检索 Groovy 闭包/方法参数列表

    我们如何通过参数数组以 javascript 风格动态检索 groovy 中闭包 方法的参数列表 举例来说 我想以这种方式记录一条消息 def closure name id gt log debug Executing method wi
  • 如何删除所有控件的全局 FocusVisualStyle?

    我遇到了同样的问题全局停用 FocusVisualStyle 但所有答案都不起作用 所以 我只想设置我的应用程序中的所有控件FocusVisualStyle x Null 任何 实现这一目标的有效方法是什么 我不想单独设置每个控件 将其放入
  • 网络聊天应用程序 - ASP.NET/Jabber/Ajax/WCF/Comet/ReverseAjax - 面临的问题 - 寻求见解

    在过去的三周里 我一直在尝试构建一个基于网络的聊天应用程序 但我在构建它时遇到了任何路线 编程技术 技术 的问题 我在下面解释了我遇到的所有问题 请提供您对此的任何见解 ASP NET AJAX 第一个问题是不是真正的实时 如果客户端每 x
  • 跨域网址

    我试图在我的 javascript 代码中调用这个 URL 这是我的 JavaScript 代码 ajax url http api addressify com au address autoComplete type GET cross
  • ES6 类的 jest.mock 产生 ReferenceError: require is not Defined

    我正在尝试在我的 ES6 javascript 项目中使用 jest 创建一个自动模拟 我正在使用节点v15 0 1 还有开玩笑26 6 0在Ubuntu上18 04 5 我有一个包含以下代码的测试文件 import RenderBuffe