2016-08-25 3 views
2

Я использую redux-saga и тестирую с использованием expect. Основываясь на примере, приведенном в (удивительном) React Boilerplate, тестирование саги, которая получает нужные ему данные из Магазина (с помощью селектора), не представляет проблемы.Как проверить сагу, которая использует данные из отправленного действия

Однако, некоторые из моих саг полагаться на данных, включенных в посланных действиях:

export function* startSaga() { 
    while (true) { 
    const startAction = yield take(START); 
    const id = startAction.id || false; 
    ... 

Чтобы проверить это, я ввожу сагу, а затем, назвав его:

import { startSaga } from '../sagas.js'; 
startGenerator = startSaga(); 
... 

Из-за этого нет действия, отбрасывающего сагу, и поэтому значение id всегда будет ложным.

Мои действия и редукторы проверяются отдельно: при тестировании саг в автономном режиме, как это, есть простой способ заставить это работать?

ответ

3

При выполнении функции саги генератора, вы находитесь в контроле данных, которые получают передаются обратно на каждом yield:

import { startSaga } from '../sagas.js'; 
let startGenerator = startSaga(); 

let takeEffect = startGenerator.next() 
expect(takeEffect).toEqual(take(START)); 
startGenerator.next({id: 234}); 
+0

Это было просто :) Спасибо. – CherryFlavourPez