Если у меня есть сага с этой формой:
function * sagaWorker() {
yield put(START_ACTION)
yield take(WAIT_FOR_ACTION)
yield delay(100)
yield put(END_ACTION)
}
Я могу успешно проверить это, используя runSaga
, например:
step('saga passes the tests', async () => {
const channel = stdChannel()
const dispatched = []
const options = {
dispatch: action => dispatched.push(action),
getState: () => {},
channel
}
const task = runSaga(options, sagaWorker)
channel.put(WAIT_FOR_ACTION)
await task.toPromise()
expect(dispatched).to.deep.eql([START_ACTION, END_ACTION])
})
Однако, если я перенесу задержку перед дублем:
function * sagaWorker() {
yield put(START_ACTION)
yield delay(100)
yield take(WAIT_FOR_ACTION)
yield put(END_ACTION)
}
Теперь сага не дотягивает до завершения и не останавливается - она достигает take
, но действие никогда не наступает в канале.
Можно ли проверить это с помощью этой формы? Я подозреваю, что могу заставить его работать, call
используя delay
s, а не yield
напрямую, но я хотел бы знать, как заставить это работать без этого (если это возможно).