Jest Projects в Monorepo не может найти конфигурационные файлы в проектах - PullRequest
1 голос
/ 22 февраля 2020

Проблемы с настройкой шутливых проектов. Проект A имеет некоторую дополнительную конфигурацию, которую он выполняет (setupJest, создает некоторые пользовательские сопоставления и т. Д. c), которых нет в проекте B. Когда я запускаю jest, я получаю эту ошибку для каждого теста, который он пытается запустить:

Test suite failed to run
File not found: <rootDir>/src/tsconfig.spec.json (resolved as: repo\src\tsconfig.spec.json)

В репозитории root нет папки sr c, только внутри отдельных папок проекта. Я также не ссылаюсь на src \ tsconfig.spe c. json где-либо в моих настройках. Таким образом, я немного запутался в этом вопросе относительно того, что попробовать. Я пытался поместить rootDir на все и прописать пути, но, похоже, ничего не работает. Любые предложения, идеи или помощь будут ДЕЙСТВИТЕЛЬНО приветствоваться.

Для справки, репо - это папка на диске windows, которая содержит репо. например, c: \ companyName \ productName \

Это моя структура

repo
  |- jest.config.js
  |- projects
       |- projectA
            |- jest.config.js
            |- tsconfig.spec.json
            |- src
                 |- setupJest.js
       |- projectB
            |- jest.config.js
            |- tsconfig.spec.json

root jest.config. js:

module.exports = {
    preset: 'jest-preset-angular',
    projects: [
        '<rootDir>/projects/projectA/jest.config.js',
        '<rootDir>/projects/projectB/jest.config.js'
    ]
    reporters: ['jest-silent-reporter'],
};

projectA jest.config. js:

module.exports = {
    globals: {
        'ts-jest': {
            tsConfig: 'tsconfig.spec.json',
            stringifyContentPathRegex: '\\.html$',
            astTransformers: ['jest-preset-angular/InlineHtmlStripStylesTransformer'],
            diagnostics: false,
        },
    },
    setupFilesAfterEnv: ['src/setupJest.ts'],
};

projectB jest.config. js:

module.exports = {
    globals: {
    'ts-jest': {
        tsConfig: 'tsconfig.spec.json',
            stringifyContentPathRegex: '\\.html$',
            astTransformers: ['jest-preset-angular/InlineHtmlStripStylesTransformer'],
            diagnostics: false,
        },
    },
};

1 Ответ

0 голосов
/ 26 февраля 2020

Хорошо, так что после 4 дней интенсивного поиска сообщений о проблемах на github и нескольких учебных пособий по YouTube, которые я смог найти, я запутался в том, как заставить это работать.

root jest.config. js

globals: {
    'ts-jest': {
        astTransformers: ['jest-preset-angular/InlineHtmlStripStylesTransformer'],
        diagnostics: false,
        stringifyContentPathRegex: '\\.html$',
    },
},
moduleDirectories: ['node_modules', './'],
modulePaths: ['node_modules', './'],
preset: 'ts-jest',
projects: ['projects/projectA', 'projects/projectB'],
reporters: ['jest-silent-reporter'],
testEnvironment: 'node',
transform: {
    '\\.ts$': ['ts-jest'],
    '\\.html$': ['ts-jest'],
},
verbose: true,

projectA / B jest.config. js

module.exports = {
globals: {
    'ts-jest': {
        astTransformers: ['jest-preset-angular/InlineHtmlStripStylesTransformer'],
        diagnostics: false,
        stringifyContentPathRegex: '\\.html$',
        tsConfig: '<rootDir>/projects/projectA/tsconfig.spec.json',
    },
},
displayName: 'projectA',
moduleDirectories: ['node_modules', './'],
modulePaths: ['node_modules', './'],
name: 'projectA',
rootDir: './../../',
testMatch: ['<rootDir>/projects/projectA/**/*.spec.ts'],
transform: {
    '\\.ts$': ['ts-jest'],
    '\\.html$': ['ts-jest'],
},
};

Оказывается, действительно важным битом является "rootDir: './../ .. /'" кусок. Остальное было несколько определено c для исправления других ошибок, которые возникали, когда я работал с ними, но как только я правильно определил rootDir из подпроектов, он фактически начал видеть их все правильно. Так что это ключ. jest.config. js (независимо от того, где он находится в проекте) определяет rootDir относительно себя. Поэтому, когда он попал в папку проекта и получил доступ к конфигурации, он переназначил rootDir и потерялся. Определение root из подпроектов так же, как и родительский jest config, решает проблему. Документация Джеста не совсем ясна по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...