Я работаю над созданием проекта с помощью 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?

17
Krustal 17 Окт 2015 в 22:39

6 ответов

Лучший ответ

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

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

"jest": {
    "modulePaths": ["src"], 
    ...
}
32
jolyonruss 6 Апр 2018 в 10:16

Версия Jest 23.6.0:

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

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

Или в package.json

"jest": {
    "moduleDirectories": ["node_modules", "src"], 
    ...
}
1
Said Kholov 6 Ноя 2018 в 01:45

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

2
Thomas Hallock 19 Фев 2016 в 21:43

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

2
riscarrott 20 Окт 2015 в 12:03

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

NODE_PATH=src jest

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

2
Krustal 19 Окт 2015 в 03:31

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

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

4
kompot 6 Июл 2017 в 12:08