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

cod*_*der 8 unit-testing angular

我有:

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

如何使用另一个模拟器覆盖URLLoaderSvc,在具有自己独特要求的"it"情况下?有没有像TestBed.overrideProvider这样的东西...现在,我在它自己的"描述"中有每个声明,它有自己的beforeEach.

Pau*_*tha 0

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

let urlLoderSvc: URLLoaderSvc;

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

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

现在,在您的it测试用例中,您只需配置urlLoaderSvc实例即可执行您想要的操作。