SpyOn для одного метода, но несколько раз: ожидаемый шпион был вызван

Попытка шпионить один и тот же API из функции несколько раз. Но, случайно получил ошибку для разных тестовых случаев:

ОШИБКА:

HeaderComponent ChangePasswordModel
 Error: Expected spy changePassword to have been called.
at <Jasmine>
at http://localhost:9876/_karma_webpack_/webpack:/src/app/shared/header/header.component.spec.ts:110:19
 Error: Expected false to be truthy.
at <Jasmine>
at http://localhost:9876/_karma_webpack_/webpack:/src/app/shared/header/header.component.spec.ts:111:33

Некоторое время я получал ту же ошибку для других тестовых случаев.

Составная часть:

onSubmitSavePassword(changePasswordTemplate) {
  this.submitted = true;
  this.error = '';
  if (!this.changePasswordForm.valid) {
    return;
  }
  this.sharedService.changePassword(this.changePasswordForm.value)
  .subscribe((res) => {
    this.success = true;
  }, err => {
    this.error = '';
    this.loading = false;
    if (err && err.error && err.error.code) {
      var errorCode = err.error.code;
      this.changePasswordForm.controls['password'].setErrors( {invalid: true} );
      this.changePasswordForm.controls['password'].setValue('');
      this.changePasswordForm.controls['confirmPassword'].setErrors( {invalid: true} );
      this.changePasswordForm.controls['confirmPassword'].setValue('');

      switch (errorCode) {
        case 4501: {
          this.error = 'CHANGEPASSWORD.LBL_ERR_MSG_CURRENTPASSWORD';
          break;
        }
        case 4401: {
          this.error = 'RESET.ERR_MSG_MATCH_PASSWORD';
          break;
        }
        case 4402: {
          this.error = 'CHANGEPASSWORD.LBL_ERR_MSG_NEWPASSWORDNOTSAME';
          break;
        }
        case 4405: {
          this.error = 'RESET.ERR_MSG_MATCH_PASSWORD_CRITERIA';
          break;
        }
        case 4010: {
          this.closeModal();
          break;
        }
        default: {
          this.error = 'LOGIN.ERR_MSG_SERVER_ERROR';
          break;
        }
      }
    } else {
      this.error = 'LOGIN.ERR_MSG_SERVER_ERROR';
    }
  });
}

спец.ц:

describe('ChangePasswordModel', () => {

beforeEach(() => {
  component.openModal(undefined);
  fixture.detectChanges();
  fixture.whenStable().then(() => {
    const password = component.changePasswordForm.controls['password'];
    password.setValue('');
    const confirmPassword = component.changePasswordForm.controls['confirmPassword'];
    confirmPassword.setValue('');
    const currentPassword = component.changePasswordForm.controls['currentPassword'];
    currentPassword.setValue('');
  });
});

it('Submit password invalid form', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(undefined);
  component.onSubmitSavePassword(undefined);
  expect(spy).not.toHaveBeenCalled();
  expect(component.submitted).toBeTruthy();
});

it('Submit password success.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(of({
    code: 2001
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
  expect(component.success).toBeTruthy();
});

it('Submit password error 4501.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({
    error: {
      code: 4501
    }
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
  expect(component.changePasswordForm.valid).toBeFalsy();
  expect(component.success).toBeFalsy();
});

it('Submit password error 4401.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({
    error: {
      code: 4401
    }
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
  expect(component.changePasswordForm.valid).toBeFalsy();
});

it('Submit password error 4402.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({
    error: {
      code: 4402
    }
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
  expect(component.changePasswordForm.valid).toBeFalsy();
  expect(component.success).toBeFalsy();
});

it('Submit password error 4405.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({
    error: {
      code: 4405
    }
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
  expect(component.changePasswordForm.valid).toBeFalsy();
  expect(component.success).toBeFalsy();
});

it('Submit password error 4010.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({
    error: { code: 4010 }
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
});

it('Submit password error default message.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({
    error: {
      code: 9999
    }
  }));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
  expect(component.changePasswordForm.valid).toBeFalsy();
  expect(component.success).toBeFalsy();
});

it('Submit password error code not found.', () => {
  const spy = spyOn(component['sharedService'], 'changePassword').and.returnValue(rejectPromise({}));
  component.onSubmitSavePassword(undefined);
  expect(spy).toHaveBeenCalled();
});
});

0 ответов

Другие вопросы по тегам