首页 > 解决方案 > 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

标签: angularjasminerxjs5

解决方案


推荐阅读