Где должен быть записан файл установки фермента?

Вчера я обновил проект 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