Настройка Jest для имитации корневого разрешения веб-пакета и разрешения псевдонима

Я работаю над созданием проекта с помощью Webpack & Jest. На данный момент конфигурации разрешения Webpack вызывают сложности с тестами Jest. В моей конфигурации веб-пакета у меня установлены следующие параметры:

  resolve: {
    root: [__dirname + "/src/" ],
    extensions: ['', '.js', '.coffee', '.jsx', '.css', '.scss', '.svg']
  }

Это позволяет мне требовать активы и модули с:

import UnknownImg from 'assets/unknown';

Вышеупомянутое на самом деле живет (относительно моего корня проекта) src/assets/unknown.svg.

Однако, когда я запускаю тест для файлов со строками, подобными приведенным выше, я получаю ошибки при разрешении пути к этому требуемому модулю/активу.

Error: /Users/byronsm/dev/nerve-center/src/components/organisms/system_status.jsx: Cannot find module 'assets/unknown' from '/Users/byronsm/dev/nerve-center/src/components/organisms'

В этом случае он, похоже, выполняет относительный поиск пути импортированного модуля. Есть ли способ заставить Jest вести себя так же, как Webpack?


person Krustal    schedule 17.10.2015    source источник


Ответы (6)


Решение теперь представлено в официальной документации jest. См. руководство по Webpack.

Короче говоря, добавьте опцию modulePaths в конфигурацию шутки inpackage.json:

"jest": {
    "modulePaths": ["src"], 
    ...
}
person Rob Squires    schedule 01.10.2016
comment
Ссылка битая, кажется. Я думаю, это то, о чем вы говорите: facebook .github.io/jest/docs/ru/ - person LyteSpeed; 05.12.2017
comment
@clu, я обновил ссылку в ответе - надеюсь, она пройдет экспертную оценку ???????? - person jolyonruss; 06.04.2018
comment
Спасибо @jolyonruss - person Rob Squires; 09.04.2018

Вы можете использовать Jest 20+ resolver option и подключить его к jest-webpack-resolver

Этот пакет не кажется зрелым (несколько дней назад), но делает свою работу за меня. Кроме того, на данный момент требуется, чтобы конфигурация Jest находилась в отдельном файле jest.config.js или предоставлялась через CLI (не поддерживает package.json).

person kompot    schedule 06.07.2017

После хорошего ночного отдыха я снова посмотрел на это и понял, что это не конфигурация Jest, а узел. Лучший способ имитировать поведение конфигурации resolve.root в веб-пакете — установить переменную среды NODE_PATH в тот же каталог при запуске jest:

NODE_PATH=src jest

Это на самом деле не решает проблему нескольких каталогов, это решило мою проблему. Эта статья помогла мне немного лучше понять решение https://gist.github.com/branneman/8048520.

person Krustal    schedule 19.10.2015

Jestpack призван решить эту проблему путем создания тестовых файлов с помощью Webpack перед их запуском с помощью Jest. Это означает, что любые специальные правила разрешения модулей или загрузчики в вашей конфигурации Webpack будут работать точно так же, как и ваша производственная сборка.

person riscarrott    schedule 19.10.2015
comment
Похоже на несправедливую маркировку ссылки, только я думаю, что их ответ довольно разборчив без самой ссылки. - person Krustal; 06.12.2015

Я написал mimic-webpack, чтобы взять конфигурацию веб-пакета и подключиться к требованию узла, чтобы разрешать пути только как вебпак. Я не тестировал его с помощью jest, но он должен работать с любым исполнителем спецификаций, который работает на узле и даже будет поддерживать простые загрузчики.

person Thomas Hallock    schedule 19.02.2016

Шуточная версия 23.6.0:

Добавьте эту строку в jest.config.js

moduleDirectories: ["node_modules", "src"],

or in package.json

"jest": {
    "moduleDirectories": ["node_modules", "src"], 
    ...
}
person Said Kholov    schedule 06.11.2018