将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/但它对我没有帮助。需要帮助。我如何修复我的测试?
4条答案
按热度按时间gajydyqb1#
我的解决方案是删除
setup-jest.ts
文件,因为import 'jest-preset-angular/setup-jest';
已经由@angular-builders/jest
执行。fkaflof62#
为了使用本地
ng test
命令运行Jest测试套件,您必须安装@angular-builders/jest
包。如果你看一下
node_modules/@angular-builders/jest/dist/jest-config/setup.js
,你会发现构建器正在为你导入jest-preset-angular/setup-jest
。现在,您的项目中可能有一个
jest.config.js
文件,并且您的配置可能具有以下属性:模块的路径列表,这些模块在执行套件中的每个测试文件之前运行某些代码以配置或设置测试框架。
这意味着jest将在所有测试之前导入
setup-jest.ts
,现在在setup-jest.ts
中,您可能会有这是您要导入
jest-preset-angular/setup-jest
两次的位置。要防止出现这种情况,请从
setup-jest.ts
文件中删除导入,或从setupFilesAfterEnv
数组中删除文件名。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),大概应该可以修复这个问题。
5us2dqdw4#
同样的问题。笑话预设Angular v11.1
如果我删除"jest-preset-angular/setup-jest"文件并通过
jest
运行测试出现错误:
如果我添加文件并通过
angular cli
运行测试出现错误:
但我想同时使用两个命令。
在示例页面https://github.com/thymikee/jest-preset-angular/tree/main/examples/example-app-v13上,我没有发现他们使用angular cli(似乎angular.json中的标准构建器仍然存在因果报应)
所以我在setup-jest.ts中做了条件(是的,这很糟糕,但我没有找到其他方法)