javascript - 'ReferenceError: jest is not defined' 运行单元测试时
问题描述
到目前为止,我正处于一个新应用程序的早期阶段,它只使用 vanilla JS。我正在尝试将 ES6 模块用于我的 Jest 单元测试,因此我遵循了2020 年更新的说明来实现这一点。
但是,按照这些说明进行操作后,ReferenceError: jest is not defined
运行单元测试时出现错误。
这是我的 package.json:
{
"version": "1.0.0",
"main": "app.js",
"type": "module",
"jest": {
"testEnvironment": "jest-environment-node",
"transform": {}
},
"scripts": {
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
"start": "node server.js"
},
"license": "ISC",
"devDependencies": {
"express": "^4.17.1",
"jest": "^26.6.3",
"jest-environment-node": "^26.6.2",
"open": "^7.3.0"
},
"dependencies": {}
}
下面是我的测试文件。由于 jest.fn 调用而发生错误:
import { getTotalNumPeople } from "./app.js";
test("Get total number of people", async () => {
global.fetch = jest.fn(() => Promise.resolve({
json: () => Promise.resolve({count: 15})
})
)
expect(await getTotalNumPeople()).toBe(15);
});
关于为什么会发生这种情况的任何想法?我相信这个问题与我支持 ES6 模块所遵循的步骤有关。在进行这些更改之前,当我简单地将getTotalNumPeople
函数粘贴到我的测试文件中时,我的测试运行良好。
如果我注释掉模拟我的函数,我会得到一个关于未定义 fetch 的 ReferenceError(因为getTotalNumPeople
使用了 fetch)。所以这不仅仅是jest
没有定义。
我注意到,如果我没有指定jest-environment-node
为我的测试环境,则错误会更改为ReferenceError: global is not defined
由于global.fetch
在我的测试中引用。只是想我会注意到,以防万一。
解决方案
看起来您没有导入 jest,因此您只需将此行添加到文件顶部:
import {jest} from '@jest/globals'
有关更多详细信息,请参阅有关 Jest 中对 ES6 模块的本机支持的问题。
推荐阅读
- node.js - Multer - 提交文件后如何使用 upload.fields() 处理文件
- node.js - app.use() 使用 express-generator 路由
- video - 为什么
- c - GCC 使用 glibc 2.30-8 警告 gettid() 系统调用包装器
- jquery - 我如何使用我的网络服务器而不是本地主机来进行消息聊天应用程序?
- material-ui - 如何接收表格的点击事件?
- svelte - 在鼠标悬停时隐藏其他按钮
- php - 在字段上对 MySQL 表进行排序,并通过 PHP 中的单独电子邮件为该字段下的每个子组发送输出
- vue.js - 强制 Prettier 将内部文本放在新行上,不带尾随 >
- python - Django/Python:原始 SQL 查询 - 错误绑定参数