gpt4 book ai didi

unit-testing - Redux 单元测试 - reducer 和 action creator

转载 作者:行者123 更新时间:2023-12-01 13:42:38 29 4
gpt4 key购买 nike

我最近在学习 Redux 并使用 Jest 编写单元测试作为 TDD 过程的一部分

我正在为 action creators 和 reducers 编写测试。但我正在努力解决:我可以在 reducer 测试中使用 action creators 吗?

import * as types from './../../constants/auth';
import * as actions from './../../actions/auth';
import reducer, {initialState} from './../auth';

我可以这样做吗

it('should set isFetching to true', () => {
const expectedState = {
...initialState,
isFetching: true
}

expect(
reducer(initialState, actions.loginPending())
).toEqual(expectedState)
});

而不是这个?

it('should set isFetching to true', () => {
const expectedState = {
...initialState,
isFetching: true
}

expect(
reducer(initialState, {type: types.LOGIN_PENDING})
).toEqual(expectedState)
});

我之所以产生这个疑问,是因为官方文档在 reducer 测试中使用了硬编码操作:

expect(
reducer([], {
type: types.ADD_TODO,
text: 'Run the tests'
})
).toEqual([{
text: 'Run the tests',
completed: false,
id: 0
}])

我想使用硬编码操作不是最佳做法吗?

最佳答案

有趣的问题,我想说这取决于您如何运行测试套件。就个人而言,我对这些操作进行了硬编码,因为如果你仔细想想,它们会以声明的方式解释 reducer 的期望。支持导入操作的论据是,如果您更改了它们的来源,则不需要更新测试。但是,这也意味着您希望在运行这些测试之前您的操作始终正确。

如果是这种情况(如果您总是在此之前运行您的操作测试套件),那么将它们导入您的 reducer 测试套件是合理的。反对这种逻辑的唯一论点是,让新开发人员仅通过查看 reducer 测试套件来了解 reducer 的工作方式并不容易,因为他们还需要查看操作源文件以了解操作的类型已派出。

另一方面,对您的操作进行硬编码更具声明性,但如果您的操作发生变化,则需要您更新每个 reducer 测试。我仍然推荐这种方法的原因是它允许您发送更多受控数据,但我同意它会增加维护成本。

关于unit-testing - Redux 单元测试 - reducer 和 action creator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662403/

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