Шутка из приложения create-response-app не работает в Windows

У меня проблема с запуском Jest из чистого установленного приложения, созданного с использованием create-react-app в Windows 8.1. После установки, выполнив команду npm run test, выдает ошибку:

No tests found related to files changed since last commit.

Однако запуск jest --watchAll в обход сценариев реакции в том же каталоге показывает:

Test suite failed to run

Jest encountered an unexpected token

This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

Here's what you can do:
 • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
 • If you need a custom transformation specify a "transform" option in your config.
 • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/en/configuration.html

Details:

SyntaxError: E:\demo\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 | });

Долгое время гуглил и следуя предложениям людей по аналогичным вопросам, я начал добавлять Babel devDependencies в свой package.json. А получилось так:

"devDependencies": {
    "@babel/core": "^7.2.2",
    "@babel/plugin-proposal-class-properties": "^7.2.3",
    "@babel/plugin-transform-runtime": "^7.2.0",
    "@babel/preset-env": "^7.2.3",
    "@babel/preset-react": "^7.0.0",
    "@babel/register": "^7.0.0",
    "@babel/runtime": "^7.2.0",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^23.6.0",
    "babel-loader": "^8.0.5",
    "babel-plugin-root-import": "^6.1.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react-optimize": "^1.0.1",
    "jest-transform-stub": "^1.0.0"
  }

Я также добавил файл .babelrc как:

{
    "presets": [
        "@babel/react" ,
        "@babel/env"
    ],
    "plugins": [
        "@babel/plugin-proposal-class-properties"
    ]
 }

И какие бы комбинации я ни пробовал, я всегда получаю разные ошибки, и это не может быть правильным. Глядя на людей в Интернете, все могут использовать команду Jest из коробки с create-react-app.

Последняя попытка со всеми этими зависимостями приводит к следующей ошибке:

Test suite failed to run

    E:\dev\demo\src\App.test.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import React from 'react';
                                                                                                    ^^^^^

    SyntaxError: Unexpected identifier

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:403:17)

Любые идеи?! Я сбит с толку.


person Dimitris Damilos    schedule 05.01.2019    source источник
comment
Если у вас есть проблемы с запуском тестов с npm test, это проблема XY. Решением может быть stackoverflow.com / questions / 39724017 / или, возможно, npm test a.   -  person Estus Flask    schedule 05.01.2019
comment
Ради любви к Богу, npm test a - это ответ, и он отлично работает. Спасибо, @estus. Если хотите, добавьте свое решение как обычный ответ, чтобы я мог отметить его как правильный ответ.   -  person Dimitris Damilos    schedule 05.01.2019
comment
Сам я не смог это проверить. Рад, что это работает. Добавил его к ответу, надеюсь, это поможет кому-то другому.   -  person Estus Flask    schedule 05.01.2019


Ответы (1)


create-react-app - это интерфейс командной строки, который генерирует react-scripts предварительно сконфигурированную установку, которая, помимо прочего, включает конфигурацию Webpack и Jest.

Когда Jest используется непосредственно как jest, он игнорирует сгенерированную конфигурацию и требует настройки с нуля.

npm test (по умолчанию react-scripts test в настройке CRA) следует использовать вместо jest, чтобы использовать сгенерированную конфигурацию Jest.

Если проблема с npm test связана с интерактивным режимом:

Не найдено тестов, связанных с файлами, измененными с момента последней фиксации. Нажмите a, чтобы запустить все тесты, или запустите Jest с --watchAll

Его можно решить с помощью npm test a.

person Estus Flask    schedule 05.01.2019