unit-testing - 测试 Redux : Should tests of a Reducer use actions or not?

标签 unit-testing redux

我目前正在学习 Redux。 到目前为止,当我发现如何管理状态应用程序时,我不想专注于与框架(如 React)的任何集成。我只是想很好地理解 Redux 背后的想法和概念。

我遵循了 Dan Abramov 在 egghead.io 上提供的类(class).

我喜欢他通过测试他的应用程序来解释的方式,所以我开始以同样的方式使用 Redux。

我用 Redux 构建了一个应用程序。当然它有多个 reducer 和 Action 。 我不会在这里分享任何代码,因为它没有特别的兴趣。

更多的是如何处理测试和 Redux 的问题。

我不知道用相应的操作来测试 reducer 是否有意义,或者我是否应该在测试中模拟这些操作。

我首先模拟了这些操作,因为一开始,我认为将测试分开并且在 reducer 和操作之间不存在依赖关系是一个好主意。 (这是我在大多数教程中看到的。但在教程中他们经常构建小型应用程序)。

现在,我发现有时我会得到一个与相应操作不同的模拟,即使我的测试很好,当我使用dispatch(myAction())时,它也可能会在真实的应用程序中崩溃与预期不同。

我应该在 reducer 测试中使用我的操作吗?

非常感谢您对此的任何解释。

编辑:一些代码有更好的解释

reducer

case CREATE_USER_IN_PROJECT:
    currentProject = state.filter(p => p.id === action.payload.idProjet)[0]

    indexCurrentProject = state.indexOf(currentProject)

    people = [
        ...currentProject.people,
        action.payload.idUser
    ]

    return [
        ...state.slice(0, indexCurrentProject),
        Object.assign({}, currentProject, {people}),
        ...state.slice(indexCurrentProject + 1)
    ]

reducer 测试

it('CREATE_PROJECT if no project should only have the new project', done => {
    let idNewProject = uuid.v4()

    expect(
        projects(undefined, {
            type: CREATE_PROJECT,
            payload: {
                id: idNewProject,
                name: 'New project !'
            }
        })
    )
    .toEqual([{
        id: idNewProject,
        name: 'New project !',
        people: [],
        money: '€',
        operations: [],
        archived: false,
        closed: false
    }])

    done()
})

所以在这里,而不是

{
    type: CREATE_PROJECT,
    payload: {
        id: idNewProject,
        name: 'New project !'
    }
}

我应该调用我的操作 createProject('New project !') 吗?

最佳答案

感谢您的澄清。原来我在评论中误解了你的意思。希望这里有更有用的解释。

您不应该使用您的实际行动,例如createProject('New project !'),测试您的 reducer 。

Reducer 是简单的状态机,它接受输入并返回输出。您的测试应该检查它们是否确实做到了这一点,其中: 输入 = 前一个状态 > 输出 = 下一个状态。是的,它仍然算作单元测试(我不明白为什么它不会)。

我找到了这个a good read on how to test reducers

关于unit-testing - 测试 Redux : Should tests of a Reducer use actions or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37879078/

相关文章:

unit-testing - 你在哪里存储可重用的模拟?

Redux 如何更新计算状态

unit-testing - 如何创建用于单元测试的 HttpServletRequest 实例?

Java单元测试检查方法是否在不执行的情况下被调用

javascript - rc-calendar 显示内部 react 组件

javascript - 为什么它从这个 redux dispatch 返回 undefined ?

javascript - 显示加载栏直到获取

json - 使用 jsonwebtoken 登录安全

python - 如何在 django 中强制出现异常以便在 django 中对其进行测试

c - 使用 glibc 进行单元测试会导致 g_test_fail() 出现段错误