我想测试一个自定义钩子,它被实现为一个帮助函数,以便与其他钩子重用代码。它正在调用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?