Как написать модульный тест для функции ниже

#angular #typescript #unit-testing #rxjs #jasmine

Вопрос:

Приведенный ниже код работает, но код написан не так, как предполагается. Потому что функция возвращает что-то, но я в соответствии с моим модульным тестом функция возвращает значение

Код TS:

 checkSelectionFromDeletable() {  return this.numbersFacade.selectedRows$.pipe(  map(selectedRowCapsule =gt;  selectedRowCapsule?.selectedRows.find(x =gt; x.owner || x.mainNumberFlag)  )  );  }  

технические характеристики

 it('should test checkSelectionFromDeletable', () =gt; {  const rowData = of({  phoneNumber: '12345678',  extension: '',  numberType: 'MAIN',  state: 'US',  location: '',  locationId: '',  mainNumberFlag: false,  tollFreeFlag: false,  owner: 'test'  } as ICallNumberVM)  component.checkSelectionFromDeletable();  numbersFacade.selectedRows$.subscribe(res =gt; {  expect(res).toEqual(rowData);  });  });  

Комментарии:

1. Что это this.numbersFacade.selectedRows ? Покажите код

2. Итак, вы получили ошибку в этом случае модульного теста ?

Ответ №1:

Метод, который вы хотите протестировать, использует внешний элемент ( this.numbersFacade.selectedRows$ ) и возвращает наблюдаемое. Это означает, что вы должны:

  1. Инициализируйте this.numbersFacade.selectedRows$ в начале теста (часть Упорядочения).
  2. Вызовите checkSelectionFromDeletable() и сохраните возвращенное наблюдаемое (часть действия).
  3. Подпишитесь на только что возвращенный observable и ожидайте, что у каждого элемента в коллекции будет определен либо владелец, либо флаг (часть Assert).

Например:

 it('should test checkSelectionFromDeletable', () =gt; {  const inputRows = [{ ... }, .........., { ... }];  this.numbersFacade.selectedRows$ = of(inputRows); // Arrange  const actualRows$ = component.checkSelectionFromDeletable(); // Act  actualRows$.subscribe(actualRows =gt; {  const expectedRows = [{ ... }, .........., { ... }]; // Only those elements from 'inputRows' each of which having either owner or flag defined.  // Assert: here you should expect 'expectedRows' to deeply equals 'actualRows'.  }); });