Я пытаюсь настроить Jest на проект, основанный на React, который использует модули ES6. Однако у меня, похоже, проблемы с модулями ES6, я использую babel-jest и считаю, что у меня это настроено правильно (Jest обнаруживает его автоматически).
Jest, похоже, не имеет проблемы с импортом ES6, но как только он попадает в оператор импорта в одном из импортированных модулей, он задыхается. Это, как если бы он только перескакивал начальный тест script, а не какой-либо из импортированных модулей. Я пробовал различные конфигурации и искал Google без везения. Запуск тестов без импортных работ прекрасен.
Вот ошибка:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Predications from './predications';
^^^^^^
SyntaxError: Unexpected token import
Вот соответствующие биты config:
jest.conf.json
{
"testRegex": "\/test\/spec\/.*\\.js$",
}
.babelrc
{
"presets": ["es2015", "stage-0", "react"]
}
Тест script
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 необходим для того, чтобы Jest мог найти мои тесты, я попробовал переместить тесты в тестовый каталог по умолчанию, и они все еще терпят неудачу.
Я хотел бы уточнить, что сами тесты работают нормально, проблема заключается в том, что один из моих импортированных модулей использует ES6, в моем примере выше, если я не импортирую компонент карусели, тест проходит нормально, как только поскольку я импортирую тестовые дроссели в оператор импорта в этом файле. Кажется, что импортированные модули не передаются.
Обновление # 2
После некоторого расследования выясняется, что проблема не в том, что Babel не транслирует ES6 внутри node_modules. Я создал пример repo, чтобы продемонстрировать это здесь: https://github.com/jamiedust/babel-jest-example
Я понимаю, что сторонние модули должны обрабатывать свои собственные транспиляции, однако у нас есть ряд модулей, которые размещаются на нашем собственном реестре npm и повторно используются между проектами, в этом случае Webpack обрабатывает трансляцию, для тестов Jest нам нужно, чтобы эти node_modules были переделаны Вавилоном или способом использования нашего веб-пакета, настроенного для этого для нас.
Решение
Добавьте следующий конфигурационный файл в файл package.json(или Jest).
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!test-component).+\\.js$"
]
}