#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$
) и возвращает наблюдаемое. Это означает, что вы должны:
- Инициализируйте
this.numbersFacade.selectedRows$
в начале теста (часть Упорядочения). - Вызовите
checkSelectionFromDeletable()
и сохраните возвращенное наблюдаемое (часть действия). - Подпишитесь на только что возвращенный 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'. }); });