Ошибка: свойство не определено, FakeAsync и тик не работают в вызове Post API - PullRequest
0 голосов
/ 03 мая 2019

Я запускаю модульное тестирование после вызова API, я уже подтвердил, что API вызывается правильно.Я получаю ошибку, не могу прочитать свойство undefined.Я подозреваю, что это проблема асинхронного кода.

Мой API вызывается дважды, для выполнения запроса API требуется почти 2000 мс.Поэтому я добавил тик (2500).

Тем не менее я получаю свойство не определено, когда я ожидаю (component.Financials.length) .toBe (1);

spec.ts

it('should return one object', fakeAsync(() => {
      var dummyObject : any[];
     dummyObject = [
        {
          account: "shjdhjhs",
          product: "xyz"

        }
      ];
      mockFilter={ account="shjdhjhs"}

      //invoking method and intializing filter data
      compoenent.filter=mockFilter;
      component.Data();
      const req = httpMock.expectOne('/api/getrecords');
      //fails, as this api is called many times
      expect(req.request.method).toBe("POST");
      req.flush( dummyObject);
      tick(2500);
      expect(component.records.length).toBe(1);
      //cannot read property of undefined
      expect(component.records).toEqual( dummyObject);

  }));

ApiCall.ts

Data() {
    this.records = [];

    this.http.post<Device[]>('/api/getrecords', this.filter)
      .subscribe(res => {
        if (res['status'] == "FAILURE") {
          console.log(res);
        } else {
          this.records = res['data'];
          ...
        }
       }
...