角度依赖项提供程序未提供指定的备用类

  • 本文关键字:备用 程序 依赖 angular
  • 更新时间 :
  • 英文 :


我正在为我的doc-manager.component组件编写组件单元测试。doc-manager.component.ts利用了DocService,我想在我的单元测试中用MockedDocService实例替换它。

使用替代类提供程序,不同的类可以为组件提供相同的服务。在providers数组中,我使用此功能在每次组件请求DocService实例时返回MockedDocService实例。

特别注意{ provide: DocService, useClass: MockedDocService }行。

fdescribe('DocManagerComponent downloadDocumentation', () => {
let component: DocManagerComponent;
let fixture: ComponentFixture<DocManagerComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
DocManagerComponent,
],
imports: [],
providers: [
{ provide: DocService, useClass: MockedDocService }
]
}).compileComponents();
}));
it('should pass this test', () => {
fixture = TestBed.createComponent(HelpManagerComponent);
component = fixture.componentInstance;
component.doSomething();
expect(component.documentExists).toEqual(true);
});
});

component.doSomething()函数取决于DocService。但是,由于我使用的是备用类提供程序,因此我希望每次组件调用DocService函数时都会使用MockedDocService。这不会发生。该组件仍在使用DocService,并且从未使用过MockedDocService

关于我需要做什么才能用MockedDocService替换DocService的任何想法?

确保在组件所属的模块中提供服务。不手动创建它的实例,或将其直接注入到组件中。如果在测试中在模块级别提供它,但在代码中提供组件级别,则会得到不一致的结果。或者,更改测试创建/提供服务的方式以匹配生产代码。