angular - 测试具有依赖关系的服务
问题描述
我正在尝试使用 TestBed 为我的服务设置测试。该服务具有其他服务的一些依赖关系。我为这些依赖项创建了 .stub 文件并将它们导出。问题是当我尝试在测试中使用这些存根时,测试方法似乎仍然使用真正的服务而不是测试。这是我的设置(假名仅用于此线程):
describe('ServiceToTest', () => {
let stubbedService: ServiceDependency1;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [],
providers: [
ServiceToTest,
{ provide: ServiceDependency1, useClass: ServiceDependency1Stub },
{ provide: ServiceDependency2, useClass: ServiceDependency2Stub }
]
});
stubbedService = TestBed.inject(ServiceDependency1);
});
it('description', fakeAsync(() => {
// Error appears here when trying to use the BehaviorSubject on the mock:
// Property 'behaviorSubjectTest' does not exist on type
'ServiceDependency1'
stubbedService.behaviorSubjectTest.next(new Test());
... more logic
}));
});
我理解这个错误,那是因为behaviorSubjectTest
属性在存根上,而不是真正的服务。但是,当我在提供程序中将它列为 a 时,它为什么不使用存根服务useClass
呢?
我究竟做错了什么?当我看到可用的内容时,serviceDependency1Stub
我看到的是真实服务上的所有方法和属性,而不是存根。这发生在更新到 Angular 9 之后。之前我们使用了该.get
方法,然后它就起作用了。然后它是这样设置的:
describe('ServiceToTest', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [],
providers: [
ServiceToTest,
{ provide: ServiceDependency1, useClass: ServiceDependency1Stub },
{ provide: ServiceDependency2, useClass: ServiceDependency2Stub }
]
});
});
it('description', fakeAsync(() => {
const stubbedService = TestBed.get(ServiceDependency1);
stubbedService.behaviorSubjectTest.next(new Test());
... more logic
}));
});
这是 .stub 文件:
export class ServiceDependency1Stub {
public behaviorSubjectTest = new BehaviorSubject<Test>(null);
}
我猜从一开始的设置是错误的,但在更改为.inject
? 我查看了文档,但找不到任何关于测试具有依赖项的服务的好例子。如果有人可以帮助我并指出正确的方向,我将不胜感激。谢谢。
解决方案
推荐阅读
- php - PHP 5.4+ 替代 set_magic_quotes_runtime
- shopify - 有没有办法在 Shopify 部分中有多个块类型?
- c# - 串口ReadByte()超时异常
- sql - 两次插入相同的不同列表
- xml - 使用经典 ASP (DACK) 读取 XML
- sql-server - VB.Net 和 SQL 命令未处理异常
- arrays - Google 脚本帮助 - 使用日期数组。比较日期时没有得到正确的结果
- jira - JQL如何获得每个冲刺的组件速度?
- sql-server - 将变量作为属性添加到 TSQL 中 XML 的子节点
- reactjs - /bin/sh: SET: 找不到命令