javascript - 使用 Jest 和 @testing-library/react-hooks 在 TypeScript 中对自定义 React Hooks 进行单元测试
问题描述
我有一个自定义钩子,它接受一个产品 id 并与value (boolean)
和toggle
作为回报进行切换。我正在尝试按照此处的示例为它编写一个单元测试,但是我遇到了 TypeScript 类型不匹配错误(我遵循的示例不是打字稿)。
自定义挂钩:
export default function useToggle(id: number): [boolean, () => void] {
const [value, setValue] = React.useState(false);
useEffect(() => {
try {
const data = localStorage.getItem(ITEMS);
const all = data ? JSON.parse(data) : {};
setValue(!!all[id]);
} catch (error) {
console.error('items localStorage get error', error);
setValue(false);
localStorage.removeItem(ITEMS);
}
}, [id]);
function toggle() {
try {
const data = localStorage.getItem(ITEMS);
const all = data ? JSON?.parse(data) : {};
all[id] = !all[id];
localStorage.setItem(ITEMS, JSON.stringify(all));
setValue(v => !v);
} catch (error) {
console.error('items localStorage set error', error);
}
}
return [value, toggle];
}
进行中的测试:
describe('useToggle', () => {
it('returns value and toggle', () => {
const { result } = renderHook(() => useToggle(1));
const { value, toggle }: [boolean, () => void] = result.current;
expect(value).toBe(false);
expect(setValue).toBeDefined();
});
});
错误:
在我定义value
and的地方toggle
,我得到Property 'value' does not exist on type '[boolean, () => void]'.
andProperty 'toggle' does not exist on type '[boolean, () => void]'.
我是错误地设置了类型定义还是有其他问题?任何指导将不胜感激。谢谢!
解决方案
您正在返回一个数组。因此,您必须破坏 using[ value, toggleLike, toggleLike]
而不是{ value, toggleLike}
.
describe('useLikes', () => {
it('returns value and toggleLike', () => {
const { result } = renderHook(() => useLikes(1));
const [ value, toggleLike ]: [boolean, () => void] = result.current;
expect(value).toBe(false);
expect(setValue).toBeDefined();
});
});
推荐阅读
- c++ - Vigenere Encription 与不同的 mod
- c++ - 适用于 C++ 的 Azure 服务总线 SDK
- jquery - 如何使用Jquery删除多个表行
- python - 求解带参数的线性方程
- reactjs - react-slick 与 react-image-zoom 冲突图像缩放不起作用
- python - 版权字符串搜索和替换问题
- node.js - sequelize 连接管理器没有正确关闭连接
- android - Android 6.0+:java.lang.UnsupportedOperationException:不支持,使用 MenuItemCompat.setOnActionExpandListener()
- xamarin - Xamarin.MAC WebView 远程调试
- sql - 创建用户计数功能