Я пытаюсь настроить Jest на проект, основанный на React, который использует модули ES6. Однако у меня, похоже, проблемы с модулями ES6, я использую babel-jest и считаю, что я правильно настроен (Jest обнаруживает это автоматически).babel-jest не обрабатывает ES6 в модулях
У Jest нет проблем с использованием импорта ES6, однако, как только он попадает на оператор импорта внутри одного из импортированных модулей, он задыхается. Это похоже на то, что он переводит только начальный тестовый скрипт, а не какой-либо из импортированных модулей. Я пробовал различные конфигурации и искал Google без везения. Бегущие тесты без импорта прекрасно работают.
Здесь ошибка:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Predications from './predications';
^^^^^^
SyntaxError: Unexpected token import
Вот соответствующие биты конфигурации:
jest.conf.json
{
"testRegex": "\/test\/spec\/.*\\.js$",
}
.babelrc
{
"presets": ["es2015", "stage-0", "react"]
}
Test сценарий
import React from 'react';
import { mount, shallow } from 'enzyme';
import Slider from 'react-slick';
import Carousel from '../../client/components/carousel/carousel.js'; // test chokes on when I include this module
describe('carousel component',() => {
it('is a test test case',() => {
expect(1 + 2).toEqual(3);
});
});
Update:
Как было предложено, я попробовал запустить тест без jest.conf.js, однако testRegex необходим для того, чтобы Шутки, чтобы найти мои тесты, я пытался двигаться тесты, тестовый каталог по умолчанию, и они все еще не работают.
Я хотел бы уточнить, что сами тесты работают нормально, проблема заключается в том, что в одном из моих импортированных модулей используется ES6, в моем примере выше, если я не импортирую компонент карусели, тест проходит нормально, поскольку как только я импортирую тестовые дроссели в оператор импорта в этом файле. Кажется, что импортированные модули не передаются.
Update # 2
После некоторого расследования возникает вопрос, что Бабель не transpiling ES6 в node_modules. Я привел пример репо, чтобы продемонстрировать это здесь: https://github.com/jamiedust/babel-jest-example
Я понимаю, что сторонние модули должны обрабатывать свои собственные транспиляции, однако у нас есть несколько модулей, которые размещены в нашем собственном реестре npm и повторно используются между проектов, в этих случаях Webpack обрабатывает трансляцию, для тестов Jest нам нужны эти node_modules, которые будут переданы Babel, или способ использования нашего веб-пакета, настроенного для этого.
Решение
Добавьте следующий конфиг в package.json (или шутя конфигурационный файл).
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!test-component).+\\.js$"
]
}
Что происходит, когда вы удаляете часть 'transform', формируете настройку шутки. Это не нужно в простых случаях. –
@ AndreasKöberle Я получаю ту же ошибку, да, ваше право Мне она, похоже, не нужна – jamiedust
Вы пробовали работать без 'jest.conf.js'? Он должен работать без дополнительной конфигурации. – Mayas