Я запускаю модульное тестирование после вызова 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'];
...
}
}