Jest не собирает конфиги в многопроектном режиме

Недавно мы перевели два разных репозитория в одно репозиторий. Каждый использует jest со своими собственными настройками, определенными в их собственных файлах package.json.

Я хотел бы использовать флаг --projects для запуска Jest в обоих проектах из корня монорепозитория. Я добавил jest.config.js файл в корень монорепозитория:

module.exports = {
    projects: ['<rootDir>/projectA', '<rootDir>/projectB']
}; 

Бегун успешно подбирает тесты для обоих проектов, но, похоже, не использует индивидуальную конфигурацию каждого проекта. Например, в «projectA» я использую babel-plugin-module-resolver. Когда я запускаю jest только в этом проекте, babel-jest успешно выбирает этот плагин, и он работает нормально, но когда я запускаю его из корневого каталога в многопроектном режиме, я получаю ошибки «Не удается найти модуль ...», которые указывают на то, что плагин не используется.

Точно так же в "projectB" я использую кастомный setupTestFrameworkScriptFile. Запуск jest в этом проекте отлично запускает этот файл, но он игнорируется при запуске из корневого каталога.

Насколько я понимаю, режим работы с несколькими проектами заключался в том, что каждый отдельный проект должен сохранять свои собственные настройки / конфигурации нетронутыми. Я что-то пропустил? Нужно ли мне настраивать и их в корне?


person kgoggin    schedule 09.10.2017    source источник
comment
Глядя на то, как это делает React, похоже, они направили проекты прямо в файл конфигурации проекта: github.com/facebook/react/pull/10214/   -  person Kenrick    schedule 21.11.2017
comment
React больше не использует проекты   -  person Sibelius Seraphini    schedule 15.11.2018


Ответы (1)


Я думаю, что есть некоторые ошибки в jest multi project runner, нам нужно предоставить несколько примеров сбоев, чтобы jest мог их исправить. Об этом почти нет документации

Я сделал эту работу, предоставив настраиваемый babel-transformer вместо прямого использования babel-jest.

Проверьте эту ссылку https://twitter.com/sseraphini/status/1061779382669316098

Используйте это для своего трансформатора внутри пакетов

const config = require('../shared/babel.config.js');

 const { createTransformer } = require('babel-jest');
 module.exports = createTransformer({
  ...config,
});

и используйте это для своего корневого трансформера

const { join, resolve } = require('path');
 const { createTransformer } = require('babel-jest');
 const packagePath = resolve('../');

const packageGlob = join(packagePath, '*');
 module.exports = createTransformer({
  babelrcRoots: packageGlob,
});

используйте это в jest.config.js

transform: {
    '^.+\\.(js|ts|tsx)?$': '<rootDir>/test/babel-transformer',
},
person Sibelius Seraphini    schedule 12.11.2018