Javascript 如何使用reduxsauce获得100%的测试覆盖率
我正在尝试使用Jest使用Redux(Javascript 如何使用reduxsauce获得100%的测试覆盖率,javascript,reactjs,redux,react-redux,jestjs,Javascript,Reactjs,Redux,React Redux,Jestjs,我正在尝试使用Jest使用Redux(React Redux+reduxsaint)测试React应用程序。 我实施了以下方法: import { createActions, createReducer } from "reduxsauce"; /** * Action types & creators */ export const { Types, Creators } = createActions({ addSample: ["text"], removeSa
React Redux
+reduxsaint
)测试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%——语句、函数、行);
在对覆盖率的反馈中,有人指出,在第16行和第20行,我没有对处理程序的声明执行测试add()
和remove()
我猜内部
reduxsauce
实现了带有一些开关盒的Reducer,但我不知道如何测试这一部分,允许测试覆盖率标准,只要看看这一部分,就会明白为什么会出现问题(在这种情况下,Branchs标准中没有达到100%的覆盖率)
我们可以按如下方式阅读此语法:
函数add()
的声明具有以下条件
- 如果在第一个参数中传递一个值,则假定
状态
将在函数范围中具有该值李>
- 如果未传递值(或者如果传递的值是
未定义的
),则假定状态
将在功能范围中将值设置为初始状态
李>
[了解有关此语法的更多信息]
由于声明了此条件,有必要测试这两种可能性,因为测试在分支标准中具有100%的覆盖率
e、 g:
你能更新你的问题以包含你的测试代码吗?很难说为什么你的测试没有看到完整的代码覆盖率。同时,我的回答谈到了如何测试reduxsauce,可能会有所帮助。谢谢Brian,我将编辑我的问题并添加更多细节。不过,我也找到了我问题的可能解决方案。老兄,我一直在想,我不会编辑这个问题,因为我的问题可以通过查看我编写的代码片段来解决。好吧,我会回答,希望这足以帮助社区。再次感谢
/* ... */ add(state = INITIAL_STATE, action) { /* ... */
/* ... */ remove(state = INITIAL_STATE, action) { /* ... */
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');
}
);