我正在为我的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
的任何想法?
确保在组件所属的模块中提供服务。不手动创建它的实例,或将其直接注入到组件中。如果在测试中在模块级别提供它,但在代码中提供组件级别,则会得到不一致的结果。或者,更改测试创建/提供服务的方式以匹配生产代码。