在Angular 11中测试组件时出现错误,但我不确定原因。
This constructor is not compatible with Angular Dependency Injection because its dependency at index 0 of the parameter list is invalid.
This can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.
at ɵɵinvalidFactoryDep (../../node_modules/@angular/core/bundles/core.umd.js:5098:15)
at NodeInjectorFactory.factory (..\..\ng:\LoginComponent\ɵfac.js:5:42)
at getNodeInjectable (../../node_modules/@angular/core/bundles/core.umd.js:3872:48)LoginComponent构造函数是:
constructor(
public loginSvc: LoginService,
public iamService: IamService,
private activatedRoute: ActivatedRoute,
private growlService: GrowlerService,
private matDialog: MatDialog,
public dialogForm: MatDialog,
@Inject(ENVIRONMENT) private environment: Environment
) {
}这使得索引0成为LoginService,我已经在测试床上模拟了它
TestBed.configureTestingModule({
imports: [
FormsModule,
RouterTestingModule.withRoutes([]),
MatDialogModule
],
declarations: [LoginComponent, CallbackComponent],
providers: [
{
provide: LoginService, useFactory: () => {
return {} as LoginService;
}
}
]
}).compileComponents();我的jest.config:
module.exports = {
displayName: 'authorization',
preset: '../../jest.preset.js',
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\.(html|svg)$',
astTransformers: {
before: [
'jest-preset-angular/build/InlineFilesTransformer',
'jest-preset-angular/build/StripStylesTransformer'
]
}
}
},
coverageDirectory: '../../coverage/libs/authorization',
snapshotSerializers: [
'jest-preset-angular/build/serializers/no-ng-attributes',
'jest-preset-angular/build/serializers/ng-snapshot',
'jest-preset-angular/build/serializers/html-comment'
],
transform: {
'^.+\\.(ts|html)$': 'ts-jest',
'^.+\\.js$': 'babel-jest'
},
transformIgnorePatterns: [
'../../node_modules/(?!hashjs-es\')'
]
};任何帮助我们都将不胜感激
发布于 2021-06-16 09:50:44
我的猜测是
@Inject(ENVIRONMENT) private environment: Environment应该是
@Inject("ENVIRONMENT") private environment: Environment或
@Inject(Environment) private environment: Environment您的模块中是否提供了环境?也许你也需要在TestBed中提供它:
{ provide: ENVIRONMENT, useValue: environment }https://stackoverflow.com/questions/67987817
复制相似问题