为了让我的传奇文件100%覆盖,我正在研究如何测试观察者。单元测试REDX-SAGA的观察者有什么意义?
我一直在google搜索,关于如何测试观察者有几个答案。也就是说,做一个takeEvery
或takeLatest
的传奇。
但是,所有的测试方法似乎基本上复制实现。那么,如果测试结果相同,那么编写测试有什么意义呢?
例子:
// saga.js
import { delay } from 'redux-saga'
import { takeEvery, call, put } from 'redux-saga/effects'
import { FETCH_RESULTS, FETCH_COMPLETE } from './actions'
import mockResults from './tests/results.mock'
export function* fetchResults() {
yield call(delay, 1000)
yield put({ type: FETCH_COMPLETE, mockResults })
}
export function* watchFetchResults() {
yield takeEvery(FETCH_RESULTS, fetchResults)
}
试验方法1:
import { takeEvery } from 'redux-saga/effects'
import { watchFetchResults, fetchResults } from '../sagas'
import { FETCH_RESULTS } from '../actions'
describe('watchFetchResults()',() => {
const gen = watchFetchResults()
// exactly the same as implementation
const expected = takeEvery(FETCH_RESULTS, fetchResults)
const actual = gen.next().value
it('Should fire on FETCH_RESULTS',() => {
expect(actual).toEqual(expected)
})
})
试验方法2:用一个帮手,像Redux Saga Test Plan
这是写作的方式不同,但我们再做一次基本相同作为实施。
import testSaga from 'redux-saga-test-plan'
import { watchFetchResults, fetchResults } from '../sagas'
import { FETCH_RESULTS } from '../actions'
it('fire on FETCH_RESULTS',() => {
testSaga(watchFetchResults)
.next()
.takeEvery(FETCH_RESULTS, fetchResults)
.finish()
.isDone()
})
相反,我想简单地知道,如果watchFestchResults
采取一切FETCH_RESULTS。或者甚至只有在它发生火灾takeEvery()
。不管它如何跟进。
或者这真的是这样做吗?
佐贺
测试例子是啊,我被这个困惑了。示例测试都将结果与传奇效果创作者进行比较。这不是我关心的。我关心他们是否把商店置于正确的状态。这些例子的测试看起来非常脆弱,没有任何证据。 –