Ключ в основном просто для непосредственного тестирования генератора функций (startIt()
, ниже):
import MySaga, {
startIt,
} from './mysaga'
describe('MySaga', () => {
describe('the default export', () => {
subject(mySagaWrapper())
it('takes every `startClock`', () => {
expect($subject.next().value)
.to.eql(call(takeEvery, 'startClock', startIt))
})
})
// THIS right here
describe('startIt()', () => {
subject(startIt())
it('invokes a delay', () => {
expect($subject.next().value)
.to.eql(call(delay, 1000 / 60))
})
})
})
function* mySagaWrapper() {
yield* MySaga
}
Если ваш экспортированный массив содержит несколько эффектов, например:
// file: mysaga.js
export default [
call(takeEvery, 'startClock', startIt),
call(takeEvery, 'foo', doFoo),
]
export function* doFoo() {
}
Просто добавьте еще один пример теста:
describe('the default export', () => {
subject(mySagaWrapper())
it('takes every `startClock`', () => {
expect($subject.next().value)
.to.eql(call(takeEvery, 'startClock', startIt))
})
it('takes every `foo`', () => {
expect($subject.next().value)
.to.eql(call(takeEvery, 'foo', doFoo))
})
})
Это не то, что я бы назвал идеальным решением, так как оно включает в себя экспорт подробностей частной реализации, но оно определенно делает возможным тестирование.