【发布时间】:2019-12-22 07:39:55
【问题描述】:
我想测试一个自定义钩子,它被实现为一个帮助函数,以便与其他钩子重用代码。它在其实现中调用useDispatch 和useSelector,并将数据保存在会话存储中:
export function useCustomHook(key, obj)
{
let myObject = {
somefield: obj.someField
};
sessionStorage.setItem(key, JSON.stringify(myObject));
const dispatch = useDispatch();
dispatch(actionCreator.addAction(key, myObject));
}
还有测试:
it('should have data in redux and session storage', () =>
{
const obj = {
somefield: 'my val',
};
renderHook(() => useCustomHook('some key', obj));
let savedObj= JSON.parse(sessionStorage.getItem('some key'));
expect(savedObj.someField).toBe('my val');
renderHook(() =>
{
console.log("INSIDE");
let reduxObj = useSelector(state => state.vals);
console.log("THE OBJECT: " );
console.log(reduxObj);
expect(reduxObj).toBe(2); //just to see if it fails the test - it's not
});
})
无论我尝试什么,测试只到达“INSIDE”控制台日志,而不打印“THE OBJECT:”控制台日志。测试本身仍然通过,所以就像 useSelector 以某种方式停止了其余的 renderHook 执行。
我猜这与测试没有连接商店的事实有关......在这种情况下可以做些什么来测试redux?
【问题讨论】:
标签: reactjs react-hooks react-hooks-testing-library