我的默认单元测试失败了。
比如说
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();
}));
我不明白为什么这个不能用。任何帮助都将被感激。
当你使用这样的提供者时,你正在尝试模拟该接口,这意味着当运行时需要调用该组件时,它会调用你的FirestoreStub。
你可以尝试这样来代替。
{provide.AngularFirestore, useValue: {provide: AngularFirestore, useValue: { SomeStubKey: "some value" }}。