1

从 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

4

0 回答 0