从v12到v13的迁移非常困难,虽然应用程序的功能非常完美,但是测试仍然是我们这方面的一个问题。
到目前为止,我们一直在使用带有ESM的Jest成功地运行v12测试(因为我们有一个WebWorker,而import.meta.url从v12开始就需要ESM )。
但是现在v13只提供ES模块,它在一些需要角码的第三方库中破译。
既然jest-preset-angular支持使用工作示例v13 + ESM运行应用程序,我想再试一次。这也是在NGXS的松懈中讨论的。
我当前非常基本的配置如下:
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'],
};我已经多次查看文档,我跟踪在不同的回购程序上打开的迁移问题,试图解决这个问题。我还讨论了包括这在内的最新相关问题。
有人成功地拥有了一个工作的v13 + Jest + ESM + NGXS堆栈吗?我好像搞不懂。
对于任何想要使用最低限度复制回购的人来说,你可以找到它https://github.com/jbpzen/angular13-jest-esm-ngxs-test。这些测试在没有ESM的情况下运行良好,并且使用ESM失败,因为我们最终试图从NGXS包中获得require @angular。
发布于 2022-03-07 15:08:03
在使用Jest保存import.meta.url语法时,我无法使它工作,Jest要求使用--experimental-vm-modules标志运行Node。
我注意到,只要节点标志不存在,我就可以使用经典的ESM配置来运行测试。
因此,我在测试配置中将import.meta.url语法转换为CommonJS,使用这个babel 插件。
https://stackoverflow.com/questions/70822764
复制相似问题