【问题标题】:"Error: Preset jest.preset.js not found" when using IntelliJ to run Jest tests in NX Workspace使用 IntelliJ 在 NX Workspace 中运行 Jest 测试时出现“错误:未找到预设 jest.preset.js”
【发布时间】:2022-07-06 01:19:35
【问题描述】:

我有一个带有 Node + Angular 库的 NX 工作区。从 NX 版本 13.x 升级到 14.x 时,NX 通过其自动迁移过程重新配置了 Jest。

运行 project:test 生成器时,我的 jest 测试按预期工作。但是,当尝试直接通过 IDE (IntelliJ) 运行单元测试时,出现以下错误:

Error: ● Validation Error:

  Preset jest.preset.js not found.

  Configuration Documentation:
  https://jestjs.io/docs/configuration

项目使用项目级配置文件设置,如下所示。

module.exports = {
   coverageDirectory: '<path>',
   displayName      : '<name>',
   globals          : {
      'ts-jest': {
         stringifyContentPathRegex: '\\.(html|svg)$',
         tsconfig                 : '<rootDir>/tsconfig.spec.json'
      }
   },

   setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],

   snapshotSerializers    : [
      'jest-preset-angular/build/serializers/no-ng-attributes',
      'jest-preset-angular/build/serializers/ng-snapshot',
      'jest-preset-angular/build/serializers/html-comment'
   ],
   transform              : {
      '^.+.(ts|mjs|js|html)$': 'jest-preset-angular'
   },
   transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'],
   preset                 : '../../../../../jest.preset.ts'
};

预设文件退出,如下图:

const nxPreset = require('@nrwl/jest/preset');

module.exports = { ...nxPreset };

我还有一个全局 jest.config.ts 文件。该文件确实引用了在其范围内不存在的jest.preset.js。此外,不存在的是全局范围的test-setup.ts 文件。如下图:

const { getJestProjects } = require('@nrwl/jest');

module.exports = {
  globals: {
    'ts-jest': {
      astTransformers: {
        before: [
          'jest-preset-angular/build/InlineFilesTransformer',
          'jest-preset-angular/build/StripStylesTransformer'
        ]
      },
      stringifyContentPathRegex: '\\.(html|svg)$',
      tsconfig: '<rootDir>/tsconfig.spec.json'
    }
  },
  preset             : 'jest.preset.js',
  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
  snapshotSerializers: [
    'jest-preset-angular/build/serializers/no-ng-attributes',
    'jest-preset-angular/build/serializers/ng-snapshot',
    'jest-preset-angular/build/serializers/html-comment'
  ],
  projects: [
    ...getJestProjects(),
    //Lots of projects
  ]
};

我认为迁移中存在问题,但我对 jest 配置的了解不够深入,无法知道如何解决这些冲突。全局配置文件中有多个问题,但是当我消除全局配置文件时,我得到了许多其他错误(因为它似乎试图在 js 中运行我的 ts 测试)。

任何关于我如何纠正这个问题的想法都将不胜感激。

【问题讨论】:

    标签: angular jestjs ts-jest


    【解决方案1】:

    我能够通过调整我的测试配置中的“工作目录”来克服这个问题。

    我收到了错误 Preset ../../jest.preset.ts not found,所以我在我的项目中找到了 jest.preset.ts 文件,并将我的配置的工作目录设置为该文件“下方”的两个文件夹。

    例如

    • 我的测试文件在src/app/my-app/A/B/C
    • 我的jest.preset.ts 文件位于src
    • 错误是Preset ../../jest.preset.ts not found
    • 将工作目录设置为src/app/my-app(这样测试运行程序将“升级”到src 文件夹)

    【讨论】:

      猜你喜欢
      • 2022-08-23
      • 2022-01-06
      • 2021-06-02
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2021-02-07
      相关资源
      最近更新 更多