angular - 如何在 Angular 中正确测试解析器服务的返回
问题描述
我发现在 Angular 中进行测试非常困难。为了处理尽可能少的样板文件,我尝试进行 jest/spectator 单元测试。
我想测试一个解析器。它应该从 catchError() 返回一个 Contact[] 或 EMPTY 类型的 Observable。结果只有两种。
以下是我到目前为止所拥有的,我知道它很粗糙。
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> |
Observable<never> {
return this.contactsService.getContacts()
.pipe(
catchError(err => EMPTY),
tap(res => res)
);
}
describe('ContactsResolverService', () => {
let spectator: SpectatorService<ContactsResolverService>;
const createService = createServiceFactory({
service: ContactsResolverService,
imports: [HttpClientModule]
});
beforeEach(() => {
spectator = createService();
});
it('should call the resolve class method', fakeAsync ( () => {
const contactsService = spectator.inject(ContactsService);
contactsService.getContacts.andReturn( of( ['ContactObj', 'ContactObj', 'ContactObj']) );
const mockSnapshot = createSpyObj<RouterStateSnapshot>('RouterStateSnapshot',
['toString']);
const mockR = createSpyObj<ActivatedRouteSnapshot>('ActivatedRouteSnapshot',
['toString']);
flushMicrotasks();
const r = spectator.service.resolve(mockR, mockSnapshot)
expect(r).toHaveBeenCalled();
}));
});
解决方案
推荐阅读
- netty - Micronaut 背压
- kubernetes - 如何从局域网中的其他机器访问服务?
- powershell - 如何在ansible上运行单个powershell命令?
- python - 如何将调整后图像的坐标转换为原始图像的坐标?
- swift - Swift 5.3 中的继承类正在调用上层类 init,而不是预期的继承 init
- javascript - 如果我们在 fileupload Popup 即将到来时单击取消,则输入类型文件将被删除
- c# - 如何使用 C# 和 Excel 互操作应用过滤器并将过滤器结果复制到另一个工作表
- linux - 我需要在终端中一次又一次地输入密码如何将其分配给变量以便我可以一次又一次地使用它
- java - 专用 tomcat 网络服务器上的网络服务响应时间
- python - 将模型转换为 IR 会破坏准确性