angular - Jasmine 测试服务
问题描述
我正在尝试使服务返回错误。
我正在模拟该服务,使用 rxjs _throw 然后测试是否已执行路由器导航功能。
但是只有当 HttpErrorResponse 对象的值为 errorMessage: 'Session not found' 时,路由器导航功能才会触发
整个对象应该是{error: {error: errorMessage: 'Session not found'}}}
我以前使用过模拟服务,但在让它返回错误并且行为与组件中的实际功能相同时遇到问题
组件功能:
this.sub = this.addressService.getAddress(postcode.replace(/\s+/g, ''), houseNo)
.subscribe((response: AddressResponse) => {
if (response.getAddressFromPostcodeResponse &&
response.getAddressFromPostcodeResponse.address &&
response.getAddressFromPostcodeResponse.address.length > 0) {
this.yourAddressDetails.addressDetails.placeholder = 'Please select';
this.yourAddressDetails.addressDetails.options = this.addressService.setAddressDetails(response.getAddressFromPostcodeResponse.address);
} else {
this.yourAddressDetails.addressDetails.options = [];
this._noPostcodeMatch = true;
}
}, error => {
this.yourAddressDetails.addressDetails.options = [];
this.httpPostcodeError = true;
if (error.error && error.error.errorMessage === 'Session not found') {
this.router.navigate([`${this.journeyService.type}/${FeatureType.SessionTimeout}`]);
}
});
考试:
it('should navigate to session-timeout component if no session.', () => {
mockAddressService.getAddress.and.returnValue(_throw({error : {
error: {
errorMessage: 'Session not found'
}
}}));
spyOn(component['router'], 'navigate');
expect(component['router'].navigate).toHaveBeenCalledWith(['quote/session-timeout']);
});
在我测试过的组件代码的那一部分中设置了其他变量,httpPostcodeError
以查看是否已设置,但是它们没有设置,因此它似乎没有执行该语句。
我明白了Expected spy navigate was not called
解决方案
推荐阅读
- python - 收到错误布朗尼无法导入 AdvancedCollectibles
- database - 三元嵌套事实类型 ORM
- php - SQL 无法从表中删除
- mongodb - MongoDB中基于变量值的条件查询
- python - Python:将 Excel 导出为 PDF 需要时间(如何减少?)
- javascript - 我怎样才能简化这样的oneliner javascript代码
- vue.js - vue-test-utils 查找按钮不适用于查找选项对象
- python - 通过网页与 Python 脚本交互的简单方法是什么?
- chart.js - 给条形图添加标签:chartjs
- apache2 - 使用 Microsoft SSO 配置 IDP 失败并出现 apache2 Mellon 错误