Jest: не удается найти модуль, необходимый внутри модуля для тестирования (относительный путь)
у меня есть этот компонент:
import React from 'react';
import VideoTag from './VideoTag';
import JWPlayer from './JWPlayer';
class VideoWrapper extends React.Component {
//... component code
}
это на основе некоторой логики отображает другой компонент внутри (VideoTag или JWPlayer), но когда я пытаюсь проверить его в файле шутки, я получаю ошибку:
не удается найти модуль './ VideoTag'
три coponents находятся в одном каталоге, поэтому он действительно работает, когда я транспилирую его и вижу его в действии в браузере, но похоже, что у Jest есть проблемы с разрешением этих относительных путей, это файл шутки:
jest.dontMock('../src/shared/components/Video/VideoWrapper.jsx');
import React from 'react';
import ReactDOM from 'react-dom';
TestUtils from 'react-addons-test-utils';
import VideoWrapper from '../src/shared/components/Video/VideoWrapper.jsx';
describe('VideoWrapper tests', () => {
it('Render JWPlayer', () => {
let vWrapper = TestUtils.renderIntoDocument(
< VideoWrapper model={model} />
);
});
});
ошибка в строке:
import VideoWrapper from '../src/shared/components/Video/VideoWrapper.jsx';
как я могу сказать jest, как обрабатывать относительные пути?
3 ответов
проблема была не в путях ,она искала только модули.расширение js, оно работало после добавления .jsx в конфигурации jest:
"moduleFileExtensions": [
"js",
"jsx"
]
вам не нужно добавлять moduleFileExtensions в конфигурацию для этих двух параметров, так как jest использует ['js', 'jsx', 'json', 'node'] в качестве расширений файлов по умолчанию. (Если вы не хотите специально пропустить какой-либо вариант)
для других, заканчивающих здесь, пытаясь использовать шутку с TypeScript: вам нужно включить ts
на moduleFileExtensions
, например:
"moduleFileExtensions": [
"js",
"jsx",
"json",
"node",
"ts"
]
вам также нужно преобразование для *.ts
файлы:
transform: {
"^.+\.vue$": "vue-jest",
"^.+\.js$": "babel-jest",
"^.+\.(ts|tsx)$": "ts-jest"
},