Операторы конвейерной передачи NGXS
Действия в NGXS обрабатываются с помощью Observables. NGXS предоставляет вам конвейерные операторы, для вашего теста вы можете использовать ofActionDispatched
. Вот список, который я взял из документации NGXS:
ofAction
срабатывает, когда происходит любое из перечисленных ниже событий жизненного цикла.
ofActionDispatched
срабатывает при отправке действия
ofActionSuccessful
срабатывает при успешном завершении действия
ofActionCanceled
срабатывает, когда действие было отменено
ofActionErrored
срабатывает, когда действие вызвало ошибку
ofActionCompleted
срабатывает, когда действие было завершено, независимо от того, было оно успешным или нет (возвращает сводку о завершении)
Отвечать
1. Создать переменную actions$
describe('control-center.state', () => {
let actions$: Observable<any>;
// ...
});
2. Инициализировать переменную actions$
наблюдаемым
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
NgxsModule.forRoot([AppState]),
NgxsModule.forFeature([ControlCenterState])
]
});
store = TestBed.get(Store);
actions$ = TestBed.get(Actions);
})
3.1 Проверьте, было ли вызвано 1 действие:
Отфильтруйте свои действия из потока с помощью оператора ofActionsDispatched()
.
it('should dispatch LogoutAction', (done) => {
actions$.pipe(ofActionDispatched(LogoutAction)).subscribe((_) => {
done();
});
service.logout();
});
3.2 Проверьте, было ли вызвано несколько действий:
Используйте оператор zip RXJS, чтобы объединить два наблюдаемых объекта с функцией ofActionsDispatched()
(zip: после того, как все наблюдаемые объекты испускают, испускают значения в виде массива).
it('should dispatch ResetStateAction and LogoutAction', (done) => {
zip(
actions$.pipe(ofActionDispatched(ResetStateAction)),
actions$.pipe(ofActionDispatched(LogoutAction))
).subscribe((_) => {
done();
});
service.logout();
});
Спецификация не будет завершена, пока не будет вызвана ее done
. Если done
не вызывается, будет сгенерировано исключение тайм-аута.
Из документации Jasmine.
person
Brampage
schedule
02.08.2018