TypeError: environment.setup не является функцией в React Testing
Я пытался реализовать пример, показанный на сайте 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
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
являются точной копией примера, показанного в разделе Начало работы с 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
ошибкой TypeError: environment.setup is not a function
?
Ответы
Ответ 1
Jest включен в ответные скрипты. Ошибка связана с конфликтом, который возник при установке Jest в проект, запущенный с помощью activ-скриптов. Руководство "Начало работы с Jest" предполагает "чистый" проект.
Просто удалите Jest из ваших (dev) зависимостей, и это должно работать.
Если вы хотите использовать Jest для тестирования компонентов React (что вы, вероятно, делаете), вам нужно изменить свой тестовый сценарий в package.json
чтобы он react-scripts test --env=jsdom
.
Ответ 2
Основываясь на этой проблеме github: @jest-environment узел не работает в 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
как показано в официальном руководстве по sum.test.js
.
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
команду 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.
Шаг 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"
}
}
Я снова запустил yarn test
на 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.
Слишком долго; Не читал (TL; DR)
- Не добавляйте
jest
используя yarn add --dev jest
или npm install --save-dev jest
если вы используете npm install --save-dev jest
create-react-app
. jest
включается в node-modules
проекта, если вы используете create-react-app
.
Из официальной документации Jest:
Настройка с помощью приложения "Создать React"
Если вы только начинаете работать с React, мы рекомендуем использовать приложение "Создать React". Он готов к использованию и поставляется с Jest! Вам не нужно делать никаких дополнительных шагов для настройки, и вы можете перейти прямо к следующему разделу.
- Не изменяйте тестовый скрипт в файле
package.json
{ посмотрите на эту проблему }. Оставьте значение по умолчанию "test": "react-scripts test --env=jsdom",
в этом.
Ответ 3
Просто удалите jest
из ваших зависимостей dev. Для этого выполните следующую команду:
npm remove --save-dev jest
Ответ 4
Моя проблема решается с помощью этого:
,
Если в вашем файле package.json есть оба сценария реакции и jest, удалите из него jest.
Затем удалите package-lock.json, yarn.lock и node_modules.
Затем запустите npm install (или yarn, если вы его используете). ~ Дан Абрамов ~. Выпуски № 5119.
Ответ 5
добавлять
"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 и имеющих эту проблему, есть два решения.
1- обновите test
команду (или добавьте новую) в package.json для jest
вместо react-scripts test
, потому что react-scripts test
не разрешит опции jest в package.json, как указано @Xinyang_Li в комментариях.
2 - если вы не хотите изменять команду test в package.json и используете тест по умолчанию create-реагировать-app; удалить опции jest из packge.json (если есть)
"jest": {
"testEnvironment": "node"
}
затем удалите node_modules и затем запустите npm install, чтобы установить их все снова, и после этого ваши тесты должны работать нормально.
Ответ 6
Вы должны понизить установленный jest
до v20.0.4
npm install -D [email protected]
Ответ 7
Это старая проблема, но я столкнулся с той же проблемой. У нас есть пакет 20.xx
react-scripts
, и он использует Jest версии 20.xx
которого есть проблемы с coverageTreshold
. Я не мог использовать более новую версию react-scripts
и единственное, что мне помогло, - это использование разрешения пряжи, читайте больше здесь https://yarnpkg.com/lang/en/docs/selective-version-resolutions/.