如何测试自定义的react native hook,其中包含useAsyncStorage hook?
这是我的钩子:
export const useCustomHook = () => {
const storage = useAsyncStorage('item');
const [state, setState] = useState<string | null>(null);
useEffect(() => {
if (!state) {
storage.getItem().then(value => {
setState(value ?? 'some value');
});
}
}, [state, storage]);
return state;
};
我尝试使用react本地测试库和jest来测试它。但是当我呈现钩子时得到错误(0,_asyncStorage.useAsyncStorage)不是一个函数
这是测试的一部分,即使没有预期,钩子也不会呈现
import AsyncStorage from '../../../__mocks__/@react-native-async-storage/async-storage';
jest.mock('@react-native-async-storage/async-storage/jest/async-storage-mock');
describe('Test hook', () => {
beforeEach(async () => {
await AsyncStorage.setItem('item', 'value');
});
it('Should return item', () => {
const { result } = renderHook(() => {
useCustomHook();
});
});
});
1条答案
按热度按时间lymgl2op1#
好的,我注意到你从模拟中导入了它,这是正确的做法。
您需要做的是通过自己实现包的方法和模块来模拟模块。
在为
AsyncStorage
创建的模拟模块中我相信你有这样的:
因此,您需要在这个模拟模块中添加钩子的模拟实现。
以下是AsyncStorage钩子API的文档,
你需要的改变是这样的: