我试图实现Jest网站中显示的示例:Getting started with Jest。
在运行npm test
时,我收到以下错误:
FAIL src/sum.test.js
● Test suite failed to run
TypeError: environment.setup is not a function
at node_modules/jest-runner/build/run_test.js:112:23
sum.js
:
function sum(a, b){
return a+b;
}
module.exports = sum;
sum.test.js
:
const sum = require('./sum');
test('adding sum function', () => {
expect(sum(234,4)).toBe(238);
})
sum.js
和sum.test.js
是Getting started with Jest中显示的示例的精确副本。
package.json
:
{
"name": "jest-demo-test",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-scripts": "1.0.17"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "jest",
"eject": "react-scripts eject"
},
"devDependencies": {
"jest": "^22.0.4"
}
}
那么,我怎样才能摆脱TypeError: environment.setup is not a function
错误?
答案 0 :(得分:19)
Jest包含在react-scripts中。该错误是由于在使用react-scripts启动的项目中安装Jest时出现的冲突。 “Jest入门”指南需要一个“干净”的项目。
只需从您的(dev)依赖项中删除Jest即可。
如果您想使用Jest来测试React组件(您可能会这样做),则需要将package.json
中的测试脚本修改为react-scripts test --env=jsdom
。
答案 1 :(得分:12)
<击> 基于此github问题:@jest-environment node not working in v22,
我将sum.test.js
更新为:
击>
/**
* @jest-environment node
*/
const sum = require('./sum');
test('adding sum function', () => {
expect(sum(234,4)).toBe(238);
})
<击>
现在我摆脱了TypeError: environment.setup is not a function
。
击>
输出:
PASS src/sum.test.js
✓ adding sum function (2ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.438s
Ran all test suites.
阅读几个答案,今天我重新创建了这个场景。
第1步:
我使用create-react-app
创建了一个新项目。
命令:create-react-app demo-app
package.json
档案:
{
"name": "demo-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.3.2",
"react-dom": "^16.3.2",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
此文件显示jest
未包含在依赖项中。
第2步:
我在sum.js
文件夹中添加了sum.test.js
和src
个文件,如官方getting started guide所示。
sum.js
:
function sum(a, b) {
return a + b;
}
module.exports = sum;
sum.test.js
:
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
第3步:
我在yarn test
文件中没有包含jest
而运行了package.json
命令。
因此,此测试命令使用react-scripts test --env=jsdom
package.json
中显示的PASS src/sum.test.js
PASS src/App.test.js
Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 0.594s, estimated 1s
Ran all test suites related to changed files.
。
测试结果:
package.json
第4步:
我更新了jest
文件以使用{
"name": "demo-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.3.2",
"react-dom": "^16.3.2",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "jest",
"eject": "react-scripts eject"
}
}
作为测试脚本:
yarn test
我再次运行$ jest
PASS src/sum.test.js
FAIL src/App.test.js
● Test suite failed to run
/<PATH>/demo-app/src/App.test.js: Unexpected token (7:18)
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
> 7 | ReactDOM.render(<App />, div);
| ^
8 | ReactDOM.unmountComponentAtNode(div);
9 | });
10 |
Test Suites: 1 failed, 1 passed, 2 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.645s, estimated 1s
Ran all test suites.
,输出为:
jest
yarn add --dev jest
命令,请勿使用npm install --save-dev jest
或create-react-app
添加jest
。如果您使用node-modules
,则create-react-app
包含在项目的package.json
中。来自official Jest documentation:
使用Create React App进行设置
如果您刚开始使用React,我们建议您使用Create 反应App。它随时可以使用并随Jest一起发货!你不需要 做任何额外的设置步骤,并可以直接进入下一步 部分。
"test": "react-scripts test --env=jsdom",
文件{look at this issue}中的测试脚本。保留默认{{1}}。 答案 2 :(得分:7)
只需从您的dev依赖项中删除jest
即可。为此,请运行以下命令:
npm remove --save-dev jest
答案 3 :(得分:4)
我的问题解决了这个问题:
。
如果你的package.json中有反应脚本和jest,请从中删除jest
然后删除package-lock.json,yarn.lock和node_modules
然后运行 npm install (或 yarn ,如果您使用它)。 〜丹阿布拉莫夫〜
。
issues #5119
答案 4 :(得分:2)
添加
"jest": {
"testEnvironment": "node"
}
到你的package.json文件中,你的package.json看起来像这样:
{
"name": "jest-demo-test",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-scripts": "1.0.17"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "jest",
"eject": "react-scripts eject"
},
"devDependencies": {
"jest": "^22.0.4"
},
"jest": {
"testEnvironment": "node"
}
}
<强>更新强>
对于使用create app并遇到此问题的人来说,有两种解决方案。
更新test
命令(或添加新命令)在 package.json 中指向jest
而不是react-scripts test
,因为react-scripts test
将不允许 package.json 中的jest选项作为@Xinyang_Li在评论中说明。
2 - 如果您不想在package.json中更改测试命令,请使用默认的create-react-app test;从packge.json中删除jest选项(如果存在) <击> 撞击>
<击> "jest": {
"testEnvironment": "node"
}
击> <击> 撞击> 然后删除 node_modules ,然后运行 npm install 再次安装它们,之后测试应该正常运行。
答案 5 :(得分:1)
您应该将已安装的jest
降级为v20.0.4
npm install -D jest@20.0.4
答案 6 :(得分:0)
这是一个较旧的问题,但我遇到了同样的问题。我们有setupFormUI
软件包,它使用Jest版本react-scripts
,该版本存在20.x.x
问题。我不能使用较新的coverageTreshold
版本,唯一有用的是使用纱线分辨率,请在https://yarnpkg.com/lang/en/docs/selective-version-resolutions/上阅读更多内容。