Jest错误:无法设置基本提供程序,使用“ng test”升级Angular v13后

20jt8wwn  于 2023-02-06  发布在  Jest
关注(0)|答案(4)|浏览(197)

将Angular升级到v 13后,当我尝试在jest环境中运行测试时,出现了一个错误:

Cannot set base providers because it has already been called
import 'jest-preset-angular/setup-jest';

另外,我按照这篇文章中指出的那样配置了Jest:https://thymikee.github.io/jest-preset-angular/docs/next/guides/esm-support/但它对我没有帮助。需要帮助。我如何修复我的测试?

gajydyqb

gajydyqb1#

我的解决方案是删除setup-jest.ts文件,因为import 'jest-preset-angular/setup-jest';已经由@angular-builders/jest执行。

fkaflof6

fkaflof62#

为了使用本地ng test命令运行Jest测试套件,您必须安装@angular-builders/jest包。
如果你看一下node_modules/@angular-builders/jest/dist/jest-config/setup.js,你会发现构建器正在为你导入jest-preset-angular/setup-jest

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("jest-preset-angular/setup-jest");
//# sourceMappingURL=setup.js.map

现在,您的项目中可能有一个jest.config.js文件,并且您的配置可能具有以下属性:
模块的路径列表,这些模块在执行套件中的每个测试文件之前运行某些代码以配置或设置测试框架。

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

这意味着jest将在所有测试之前导入setup-jest.ts,现在在setup-jest.ts中,您可能会有

import 'jest-preset-angular/setup-jest';

这是您要导入jest-preset-angular/setup-jest两次的位置。
要防止出现这种情况,请从setup-jest.ts文件中删除导入,或从setupFilesAfterEnv数组中删除文件名。

pcww981p

pcww981p3#

我也遇到过同样的问题。似乎Angular 13的ESM支持还没有发布。https://thymikee.github.io/jest-preset-angular/docs/next/guides/angular-13+
然而,有一个PR已经合并(https://github.com/thymikee/jest-preset-angular/pull/1122),大概应该可以修复这个问题。

5us2dqdw

5us2dqdw4#

同样的问题。笑话预设Angular v11.1
如果我删除"jest-preset-angular/setup-jest"文件并通过jest运行测试
出现错误:

The injectable 'PlatformLocation' need to be compiled...

如果我添加文件并通过angular cli运行测试
出现错误:

Cannot set base providers...

但我想同时使用两个命令。
在示例页面https://github.com/thymikee/jest-preset-angular/tree/main/examples/example-app-v13上,我没有发现他们使用angular cli(似乎angular.json中的标准构建器仍然存在因果报应)
所以我在setup-jest.ts中做了条件(是的,这很糟糕,但我没有找到其他方法)

//setup-jest.ts
if (!process.env[1].includes('ng.js')) {
   require('jest-preset-angular/setup-jest')
}

相关问题