Angular 2单元测试:如何覆盖TestBed中的单个提供程序(对于服务的单元测试,而不是具有服务依赖性的组件)?

时间:2016-12-14 15:32:41

标签: unit-testing angular

我有:

beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                DocumentsLoaderSvc,
               { provide: MgrSvc, useClass: MockMgrSvc },
               { provide: URLLoaderSvc, useClass:  MockURLLoaderSvcWhenData}
            ]
        });
    });

如何在另一个模拟中覆盖URLLoaderSvc,在"它"案件有自己独特的要求吗?有没有像TestBed.overrideProvider这样的东西......现在,我在它自己的#34;描述"中有每个它的声明,并且有自己的beforeEach。

2 个答案:

答案 0 :(得分:0)

也许你最好的选择是让模拟可配置以满足不同测试用例的需求。将其保留为实例并使用useValue代替useClass

let urlLoderSvc: URLLoaderSvc;

beforeEach(() => {
  urlLoaderSvc = new URLLoaderSvc();

  TestBed.configureTestingModule({
     providers: [
        DocumentsLoaderSvc,
        { provide: MgrSvc, useClass: MockMgrSvc },
        { provide: URLLoaderSvc, useValue: urlLoaderSvc }
     ]
  });
});

现在,在it测试用例中,您可以配置urlLoaderSvc实例以执行任何操作。

答案 1 :(得分:0)

您可以在需要的每个ts-mockery中使用Mock.extendbeforeEach。这里的问题在于,此时的服务已被注入到组件中-重新提供它不会更新已经注入的实例。在这种情况下,您需要为每个测试创建一个夹具,在其中更改提供的实例。有了一个灵活的模拟实例会更容易,您可以在每次测试之前对其进行配置。

但是有时候是需要的,是的,例如,如果您有类似存储库服务的服务,需要http服务调用,并且需要测试此调用的成功,失败和阻塞,以确保回购服务正确响应

相关问题