TypeError:environment.setup不是React Testing中的函数

ars*_*sho 23 javascript testing packages reactjs

我试图实现Jest网站上显示的示例: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
Run Code Online (Sandbox Code Playgroud)

sum.js:

function sum(a, b){
  return a+b;
}
module.exports = sum;
Run Code Online (Sandbox Code Playgroud)

sum.test.js:

const sum = require('./sum');

test('adding sum function', () => {
  expect(sum(234,4)).toBe(238);
})
Run Code Online (Sandbox Code Playgroud)

sum.js并且sum.test.jsJest入门中显示的示例的精确副本.

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"
  }
}
Run Code Online (Sandbox Code Playgroud)

那么,我该如何摆脱TypeError: environment.setup is not a function错误呢?

xor*_*xor 19

Jest包含在react-scripts中.该错误是由于在使用react-scripts启动的项目中安装Jest时出现的冲突."Jest入门"指南需要一个"干净"的项目.

只需从您的(dev)依赖项中删除Jest即可.

如果你想用玩笑的测试反应的组分(你可能做的),你需要修改你的测试脚本中package.jsonreact-scripts test --env=jsdom,因为它是.


ars*_*sho 12

根据这个github问题:@jest-environment节点在v22中不起作用,

我更新了sum.test.js:

/**
 * @jest-environment node
 */

const sum = require('./sum');

test('adding sum function', () => {
  expect(sum(234,4)).toBe(238);
})
Run Code Online (Sandbox Code Playgroud)

现在我摆脱了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.
Run Code Online (Sandbox Code Playgroud)

更新

阅读几个答案,今天我重新创建了场景.

第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"
  }
}
Run Code Online (Sandbox Code Playgroud)

此文件显示jest不包含在依赖项中.

:第2步 我包括sum.jssum.test.js文件src作为正式所示的文件夹入门指南.

sum.js:

function sum(a, b) {
  return a + b;
}
module.exports = sum;
Run Code Online (Sandbox Code Playgroud)

sum.test.js:

const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});
Run Code Online (Sandbox Code Playgroud)

第3步: 我运行yarn test命令而不包含jestpackage.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.
Run Code Online (Sandbox Code Playgroud)

第4步: 我更新了package.json文件以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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我再次跑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.
Run Code Online (Sandbox Code Playgroud)

太长; 没看过(TL; DR)

  1. 不要添加jest使用yarn add --dev jestnpm install --save-dev jest使用create-react-app命令.如果您使用,jest则包含在node-modules项目中create-react-app.

官方Jest文档:

使用Create React App进行设置

如果您刚刚开始使用React,我们建议您使用Create React App.它随时可以使用并随Jest一起发货!您无需执行任何额外的设置步骤,可以直接进入下一部分.

  1. 不要更改package.json文件中的测试脚本{ 查看此问题 }.保持默认值"test": "react-scripts test --env=jsdom",.

  • 这个答案非常不完整.应该在答案中添加相关的解释,而不是仅仅重定向到问题. (5认同)

小智 7

只需jest从您的dev依赖项中删除即可.为此,请运行以下命令:

npm remove --save-dev jest
Run Code Online (Sandbox Code Playgroud)