gpt4 book ai didi

unit-testing - 单元测试 redux-saga watchers 的意义何在?

转载 作者:行者123 更新时间:2023-12-04 00:59:55 25 4
gpt4 key购买 nike

为了 100% 覆盖我的 Saga 文件,我正在研究如何测试观察者。

我一直在谷歌搜索,关于如何测试观察者有几个答案。也就是说,saga 做了一个 takeEverytakeLatest .

然而,所有的测试方法似乎基本上都是复制实现。那么,如果它是相同的,那么编写测试有什么意义呢?

示例:

// 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)
}

测试方法一:

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)
})
})

测试方法二:带 helper ,如 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() .不管后续如何。

或者这真的是这样做的方式吗?

最佳答案

听起来测试它们的目的是实现 100% 的测试覆盖率。

有些东西可以进行单元测试,但是否应该进行单元测试是有问题的。

在我看来,这种情况可能更适合进行“集成”测试。不是简单地测试单个方法,而是测试几种方法如何作为一个整体一起工作的东西。也许您可以调用一个操作来触发使用您的 saga 的 reducer ,然后检查存储中的结果更改?这比单独测试传奇更有意义。

关于unit-testing - 单元测试 redux-saga watchers 的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com