Жасмин: ошибка (не функция) при проверке, если мой метод вызывает службу - PullRequest
0 голосов
/ 29 июня 2018

В моем классе компонентов мой метод getUsers () использует сервис getData (). В моем модульном тесте я хотел бы проверить, успешно ли мой метод вызывает getData (). Поэтому я написал простой тест, но думаю, что-то упустил. В моем тесте я внедряю сервис, создаю fakeasync этого сервиса. Оттуда я наблюдаю за моим сервисом и методом getData. Затем я преформирую свой метод getUsers (). Наконец, я ожидал, что getData будет вызван. При запуске теста я получаю следующую ошибку: TypeError: this.httpService.getData(...).catch is not a function. Я думаю, что я не использую шпион правильно. Вот изолированный тест:

 it('should have getUsers() call the service GetData()', inject([HttpService], fakeAsync((httpService) => {

 let url = AppConfig.URL_UsersList //AppConfig is importerd
 spyOn(httpService, 'getData').and.returnValue(url);

    dashboardComponent.getUsers();

    expect(httpService.getData()).toHaveBeenCalled();

  })))

Я думал, что это как-то связано с тем, как я настроил класс спецификации? Вот как я это настроил

describe('Dashboard Component', () => {
  let httpService: HttpService;
  let dashboardComponent: DashboardComponent
  let fixture: ComponentFixture<DashboardComponent>
  //let element;

  beforeEach(async() => {
    TestBed.configureTestingModule({
      declarations: [
        DashboardComponent
      ],
       providers: [
           HttpService
      ],
    }).compileComponents();
  });

beforeEach(() => {
    fixture = TestBed.createComponent(DashboardComponent);
    dashboardComponent = fixture.componentInstance;
  });

А вот функция, которую я пытаюсь проверить:

 getUsers() {
        this.httpService.getData(AppConfig.URL_UsersList)
            .catch((error: Response | any) => {
                this.showAlertWindow(this.exceptionMessage);
                console.error(error.message || error);
                return Observable.throw(error.message || error);
            })
            .subscribe((res: any) => {
                this.rowData = res;
                this.redrawAgGrid();
            });
    }

Моя цель состоит в том, чтобы мой тест успешно проверял, вызывается ли getData при использовании моего метода getUsers. Спасибо!

РЕДАКТИРОВАТЬ: Таким образом, причина, по которой я получил эту ошибку, заключалась в том, что мой компонент возвращает наблюдаемое, мне просто вернули строку. Вот обновленная строка. Я подозреваю, что это работает должным образом, потому что теперь я получаю совершенно не связанную ошибку, говоря, что свойство API не определено.

   spyOn(httpService, 'getData').and.returnValue(Observable.of(url));

1 Ответ

0 голосов
/ 29 июня 2018

Прочтите сообщение. Это говорит:

this.httpService.getData (...). Catch не является функцией

Итак, он вызывает getData(), а затем вызывает .catch() для значения, возвращаемого getData(), и это не удается, потому что getData() не возвращает то, что имеет метод catch().

Итак,

  1. Код, который вы тестируете, не является кодом, который вы опубликовали, так как код, который вы отправили, вызывает this.httpService.getData(...).subscribe(), и сообщение жалуется на this.httpService.getData(...).catch
  2. Фактический код ожидает чего-то от getData (), у которого есть метод catch (), поэтому, вероятно, это обещание. Но ты заставишь его вернуться AppConfig.URL_UsersList, и я думаю, это не обещание.
...