首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我得到“这个构造函数与角度依赖注入不兼容”

为什么我得到“这个构造函数与角度依赖注入不兼容”
EN

Stack Overflow用户
提问于 2021-06-15 22:03:22
回答 1查看 91关注 0票数 0

在Angular 11中测试组件时出现错误,但我不确定原因。

代码语言:javascript
复制
    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构造函数是:

代码语言:javascript
复制
  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,我已经在测试床上模拟了它

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

我的jest.config:

代码语言:javascript
复制
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\')'
  ]
};

任何帮助我们都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2021-06-16 09:50:44

我的猜测是

代码语言:javascript
复制
@Inject(ENVIRONMENT) private environment: Environment

应该是

代码语言:javascript
复制
@Inject("ENVIRONMENT") private environment: Environment

代码语言:javascript
复制
@Inject(Environment) private environment: Environment

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

代码语言:javascript
复制
{ provide: ENVIRONMENT, useValue: environment }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67987817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档