Где должен быть записан файл установки фермента?
Вчера я обновил проект React до версии v16.0, но обнаружил, что у Фермента возникли проблемы.
Error:
Enzyme Internal Error: Enzyme expects an adapter to be configured, but found none. To
configure an adapter, you should call `Enzyme.configure({ adapter: new Adapter() })`
before using any of Enzyme top level APIs, where `Adapter` is the adapter
corresponding to the library currently being tested. For example:
import Adapter from 'enzyme-adapter-react-15';
To find out more about this, see http://airbnb.io/enzyme/docs/installation/index.html
at validateAdapter (spec/components/page_components/SongListItem/index.spec.js:9:1141986)
at getAdapter (spec/components/page_components/SongListItem/index.spec.js:9:323041)
at new ReactWrapper (spec/components/page_components/SongListItem/index.spec.js:9:622193)
at mount (spec/components/page_components/SongListItem/index.spec.js:9:2025476)
at UserContext.<anonymous> (spec/components/page_components/SongListItem/index.spec.js:9:1235741)
И я нашел решение на официальном веб-сайте
// setup file
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
Но у меня есть проблема: где должен быть записан файл установки фермента? Перед каждым тестовым файлом?
Я попытался добавить приведенный выше код к одному из тестовых файлов, но проблема все еще остается
Internal error: attempt to prepend statements in disallowed (non-array) context at C:/Users/killer/workspace/react/NetEase-Cloud-Music-Web/spec/components/page_components/SongListItem/index.spec.js
Это - адрес моего проекта
Ответы
Ответ 1
У меня была похожая проблема
Если вы используете jest для запуска своих тестов, вы можете создать файл test-setup.js
и добавить фрагмент из документации по ферментам:
// test-setup.js
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
затем добавьте ключ setupTestFrameworkScriptFile
в вашу конфигурацию jest и укажите на этот файл. Например, если ваша конфигурация Jest находится в package.json
:
// package.json
{
...,
"jest": {
"setupTestFrameworkScriptFile": "<rootDir>/test-setup.js"
}
}
из шутки документов
https://facebook.github.io/jest/docs/en/configuration.html#setuptestframeworkscriptfile-string:
Путь к модулю, который выполняет некоторый код для настройки или настройки инфраструктуры тестирования перед каждым тестом. Поскольку setupFiles выполняется до установки тестовой среды в среде, этот файл сценария предоставляет вам возможность выполнить некоторый код сразу после установки тестовой среды в среде.
Это будет выполнено после инициализации среды jest, но до выполнения ваших ферментных тестов
Для людей, использующих приложение create-response-app
Вам нужно запустить yarn eject
или npm run eject
, тогда вы увидите конфигурацию Jest в вашем package.json
.
Кроме того, setupTestFrameworkScriptFile
в настоящее время устарела в пользу setupFilesAfterEnv
.
Ответ 2
Для людей, использующих create-реакции-приложение, ожидаемый путь для вашего установочного файла - src/setupTests.js
. Смотрите документацию (README) на GitHub:
Инициализация тестовой среды
Примечание: эта функция доступна по адресу [email protected] и выше. Если ваше приложение использует API-интерфейс браузера, который вам нужно смоделировать в своих тестах, или если вам просто нужна глобальная настройка перед запуском тестов, добавьте в свой проект файл src/setupTests.js. Он будет автоматически выполнен перед запуском ваших тестов.
(Так как create-реагировать-приложение не обрабатывает, по крайней мере в v1.4.1, параметр setupTestFrameworkScriptFile
в package.json).
Ответ 3
Обновление июнь 2019
Кто бы ни использовал CRA (create-реагировать-приложение), src/setupTests.js
не будет работать! Создайте файл jest.config.js
в корневой папке проекта и вставьте содержимое ниже,
module.exports = {
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"\\.(scss|sass|css)$": "identity-obj-proxy"
},
"setupFilesAfterEnv": ["<rootDir>/src/setupTests.js"]
}
ModuleNameMapper позволит избежать статических операторов импорта файлов (необязательно).
Поскольку setupTestFrameworkScriptFile
устарел, поэтому мы должны использовать setupFilesAfterEnv
свойства setupFilesAfterEnv
качестве массива.
Убедитесь, что у вас есть файл setupTests.js
расположенный в папке src вашего проекта, или укажите местоположение файла setupTests.js в вашем проекте.
Больше информации
файл setupTests.js
должен иметь содержимое ниже,
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
Эта установка работает для реакции 16