从 Angular v12 到 v13 的迁移过程非常艰难,虽然应用程序运行良好,但测试对我们来说仍然是一个问题。
到目前为止,我们一直在使用 Jest 和 ESM 运行 v12 测试(因为我们有一个 WebWorker 并且import.meta.url
从 v12 开始就需要 ESM)。
但是现在 v13 只附带了 ES 模块,它在一些需要 Angular 代码的第三方库中被破坏了。
现在jest-preset-angular
支持运行v13 + ESM
一个工作示例应用程序,我想我会再试一次。这也在 NGXS 的slack中进行了讨论。
我目前非常基本的配置如下:
const {pathsToModuleNameMapper} = require('ts-jest/utils');
const {paths} = require('./tsconfig.json').compilerOptions;
require('jest-preset-angular')
const esModules = ['tslib'].join('|');
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: 'jest-preset-angular/presets/defaults-esm',
globals: {
'ts-jest': {
useESM: true,
stringifyContentPathRegex: '\\.(html|svg)$',
tsconfig: '<rootDir>/tsconfig-esm.spec.json',
},
},
moduleNameMapper: {
...pathsToModuleNameMapper(paths, {prefix: '<rootDir>'}),
tslib: 'tslib/tslib.es6.js',
},
transformIgnorePatterns: [`/node_modules/(?!${esModules})`],
setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
};
我已经多次阅读文档,我正在关注在不同的 repo 上打开的迁移问题,试图解决这个问题。我还浏览了包括this在内的最新相关问题。
有没有人设法拥有一个工作v13 + Jest + ESM + NGXS
堆栈?我似乎无法弄清楚。
对于任何想要对最小的复制回购感到烦躁的人,你可以在这里找到它。测试在没有 ESM 的情况下运行良好,而使用 ESM 则失败,因为我们最终尝试require
从 NGXS bundle 中@angular。