служебный тест, spyOn.returnValue не возвращает заданное значение - PullRequest
0 голосов
/ 10 мая 2019

ApiServiceSpy

export class ApiServiceSpy {
  get() {
    return Observable.of(null);
  }
}

UserService

export class UserService {
  constructor(private apiService: ApiService) {
    this.initUser();
  }

  initUser() {
    this.fetchUser().subscribe(user => console.log(user.name));
  }

  fetchUser(): {name: string} {
    return this.apiService.get('user');
  }
}

UserService.spec

export class UserServiceSpec {
  ...
  {
    providers: [
      {provide: ApiService, useClass: ApiServiceSpy}
    ]
  }
  ...

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
}

Хорошо, теперь тест «должен быть создан» завершается неудачно, потому что конструктор сервиса вызывает метод initUser, который использует fetchUser и пытается попасть в user.name, но apiService.get возвращает null, поэтому мы можем ' читать name из ноль - понятно.

Так что я пытаюсь шпионить за fetchUser method

UserService.spec

export class UserServiceSpec {
  ...
  {
    providers: [
      {provide: ApiService, useClass: ApiServiceSpy}
    ]
  }
  ...

  beforeEach(() => {
    spyOn(service, 'fetchUser').and.returnValue(Observable.of({name: 'Daniel'});
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
}

К сожалению, результат тот же. Как это возможно? Я только что заметил весь метод fetchUser, но спецификация все еще рассматривает шпиона apiService.get как более важную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...