测试链依赖服务
Test chain depended services
我想测试一些服务 AService,它有一些依赖 BService,它依赖于另一个服务 e.x。 C服务。我们有链状依赖关系:
A服务 --> B服务 --> C服务
一个服务构造函数:
constructor(
private bService: BService
) {}
B服务构造函数:
constructor(
private cService: CService
) {}
如果我想在我的测试文件中测试 AService,我应该这样写:
beforeAll(() => {
injector = ReflectiveInjector.resolveAndCreate([
AService,
BService,
CService,
]);
service = injector.get(AService);
});
如果我有太多相互链接的服务,我会得到太多样板文件。
有没有办法不在我的 AService 测试文件中注入所有链式服务?
理想情况下,在对代码进行单元测试时不应包含实际依赖项。相反,您应该提供一个模拟 serviceB 并存根这些依赖项。
describe('AService', () => {
beforeAll(() => {
injector = ReflectiveInjector.resolveAndCreate([
AService,
{provide: BService, useClass: MockBService}
]);
Aservice = injector.get(AService);
});
});
class MockBService {
// enter mock functions here that you want to invoke from Service A
// this does not have dependency on Service C
}
在您的测试中,您可以监视对服务 B 的调用和 return 您想要的任何值。
const BService = AService.injector.get(BService);
spyOn(BService, 'someFunc').and.returnValue(1);
我想测试一些服务 AService,它有一些依赖 BService,它依赖于另一个服务 e.x。 C服务。我们有链状依赖关系:
A服务 --> B服务 --> C服务
一个服务构造函数:
constructor(
private bService: BService
) {}
B服务构造函数:
constructor(
private cService: CService
) {}
如果我想在我的测试文件中测试 AService,我应该这样写:
beforeAll(() => {
injector = ReflectiveInjector.resolveAndCreate([
AService,
BService,
CService,
]);
service = injector.get(AService);
});
如果我有太多相互链接的服务,我会得到太多样板文件。
有没有办法不在我的 AService 测试文件中注入所有链式服务?
理想情况下,在对代码进行单元测试时不应包含实际依赖项。相反,您应该提供一个模拟 serviceB 并存根这些依赖项。
describe('AService', () => {
beforeAll(() => {
injector = ReflectiveInjector.resolveAndCreate([
AService,
{provide: BService, useClass: MockBService}
]);
Aservice = injector.get(AService);
});
});
class MockBService {
// enter mock functions here that you want to invoke from Service A
// this does not have dependency on Service C
}
在您的测试中,您可以监视对服务 B 的调用和 return 您想要的任何值。
const BService = AService.injector.get(BService);
spyOn(BService, 'someFunc').and.returnValue(1);