我正在开发一个新的应用程序,目前只使用纯JS。我试图在我的Jest单元测试中使用ES6模块,所以我按照2020年更新的指示进行了操作。
然而,在遵循这些指示后,当运行我的单元测试时,我会收到错误ReferenceError:jest未定义
。
这是我的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
作为我的测试环境,错误会由于在我的测试中引用global.fetch
而更改为ReferenceError: global is not defined
。只是想提醒一下,以防有所帮助。
"test": "jest"
,这样 jest 就可以作为 cli 运行。更多信息请参见:https://jestjs.io/docs/en/getting-started - stealththeninja"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
替换了那个脚本。 - Eric