为什么我会"This constructor is not compatible with Angular Dependency Injection"



我在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登录服务,我在测试台中对此进行了嘲笑

TestBed.configureTestingModule({
imports: [
FormsModule,
RouterTestingModule.withRoutes([]),
MatDialogModule
],
declarations: [LoginComponent, CallbackComponent],
providers: [
{
provide: LoginService, useFactory: () => {
return {} as LoginService;
}
}
]
}).compileComponents();

我的笑话.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')'
]
};

感谢提供的任何帮助

我的猜测是

@Inject(ENVIRONMENT) private environment: Environment

应该是

@Inject("ENVIRONMENT") private environment: Environment

@Inject(Environment) private environment: Environment

您的模块中是否提供了环境?也许你也需要在TestBed中提供它:

{ provide: ENVIRONMENT, useValue: environment }

相关内容

最新更新