如何使用Apollo和Angular创建单元测试

时间:2018-01-10 12:27:23

标签: angular unit-testing apollo

我正在盯着一个Angular 5项目,它会为我的组件和服务自动生成一些规范单元测试。对于那些需要Apollo的组件,我收到错误NullInjectorError: No provider for Apollo!

我将Apollo模块添加到导入和声明部分,如下所示:

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ ContractsDashboardComponent, Apollo ]
    })
    .compileComponents();
  }));

但现在我收到了错误

Failed: Unexpected value 'Apollo' declared by the module 'DynamicTestModule'. Please add a @Pipe/@Directive/@Component annotation.

在普通应用中,我有一个模块GraphQLModule,在构造函数中调用apollo.create。我应该以某种方式嘲笑它吗?

1 个答案:

答案 0 :(得分:1)

如果Apollo是一个模块,那么你应该导入它。

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ Apollo ],
      declarations: [ ContractsDashboardComponent ]
    })
    .compileComponents();
  }));

如果它不是模块,它应该是提供者,所以你需要提供它:

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      providers: [ Apollo ],
      declarations: [ ContractsDashboardComponent ]
    })
    .compileComponents();
  }));

因为很明显,它不是一个组件(错误要求它有一个组件装饰器),但你已经进入了声明。

由于您的第一个错误是NullInjectorError: No provider for Apollo!,我猜Apollo是您注入组件的服务,因此您应该使用第二种方法,并提供。