gpt4 book ai didi

javascript - 如何使用 reduxsauce 获得 100% 测试覆盖率

转载 作者:行者123 更新时间:2023-12-02 23:25:42 25 4
gpt4 key购买 nike

我正在尝试使用 Jest 测试带有 Redux (react-redux + reduxsauce) 的 React 应用程序。我实现了以下方法:

import { createActions, createReducer } from "reduxsauce";

/**
* Action types & creators
*/
export const { Types, Creators } = createActions({
addSample: ["text"],
removeSample: ["id"]
});

/**
* Handlers
*/
export const INITIAL_STATE = [];
export function add(state = INITIAL_STATE, action) {
return [...state, { id: Math.random(), text: action.text }];
}
export function remove(state = INITIAL_STATE, action) {
return state.filter(sample => sample.id !== action.id);
}

/**
* Reducer
*/
export default createReducer(INITIAL_STATE, {
[Types.ADD_SAMPLE]: add,
[Types.REMOVE_SAMPLE]: remove
});

此实现允许我在组件之间使用 Redux 存储。但是,在测试中我无法达到 100% 的覆盖率,因为仅在分支标准中我的覆盖率为 0%(在其他标准中我达到 100% - 语句、函数、行);根据 Coverage 的反馈,第 16 行和第 20 行我没有对处理程序 add()remove() 的声明执行测试。

我猜想在内部reduxsauce用一些switch case实现了Reducer,但我不知道如何测试这一部分的方式允许测试覆盖率标准

最佳答案

只要看看这一部分,就会清楚为什么会出现问题(在本例中,分支标准没有达到 100% 覆盖率)。

/* ... */ add(state = INITIAL_STATE, action) { /* ... */
/* ... */ remove(state = INITIAL_STATE, action) { /* ... */

我们可以按如下方式阅读此语法:

函数add()的声明,有以下条件

  • 如果在第一个参数中传递一个值,则假定 state 在函数作用域中具有该值;
  • 如果未传递值(或者传递的值未定义),则假设state 的值将设置为 INITIAL_STATE函数范围;

[了解有关此语法的更多信息 here ]

由于声明了此条件,因此有必要测试这两种可能性,因为测试在分支标准中具有 100% 的覆盖率。

例如:

it("should return INITIAL_STATE when passed undefined on parameter and sometingh on action",
() => {
expect(setCurrent(undefined, action)).toBe(INITIAL_STATE);
}
);

it("should return 'test' when passed 'test' on parameter and sometingh on action",
() => {
expect(setCurrent("test", action)).toBe('test');
}
);

关于javascript - 如何使用 reduxsauce 获得 100% 测试覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56744964/

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