Angular Karma测试,Firestore的Null Injector。

问题描述 投票:0回答:1

我的默认单元测试失败了。

比如说

it('should create the app', () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
 });

返回错误:

NullInjectorError。 StaticInjectorError(DynamicTestModule)[AngularFirestore]: StaticInjectorError(Platform: core)[AngularFirestore]。 NullInjectorError.NullInjectorError(Platform: core)[AngularFirestore]: 静态注入器错误。没有AngularFirestore的提供者!

我看到其他帖子说要使用stub,我正在这么做。

const FirestoreStub = {
  collection: (name: string) => ({
    doc: (_id: string) => ({
      valueChanges: () => new BehaviorSubject({ foo: 'bar' }),
      set: (_d: any) => new Promise((resolve, _reject) => resolve()),
    }),
  }),
};

describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        RouterTestingModule,
        MatToolbarModule,
        HttpClientModule,
      ],
      declarations: [
        AppComponent,
        AlertComponent
      ],
      providers: [
        {provide: AngularFirestore, useValue: FirestoreStub}],
    }).compileComponents();
  }));

我不明白为什么这个不能用。任何帮助都将被感激。

angular firebase testing karma-jasmine
1个回答
0
投票

当你使用这样的提供者时,你正在尝试模拟该接口,这意味着当运行时需要调用该组件时,它会调用你的FirestoreStub。

你可以尝试这样来代替。

{provide.AngularFirestore, useValue: {provide: AngularFirestore, useValue: { SomeStubKey: "some value" }}。

© www.soinside.com 2019 - 2024. All rights reserved.