react-native - 如何使用计时器为 useEffect 编写 JEST 测试?
问题描述
我@react-native-community/netinfo
用于检测应用程序连接状态并在连接丢失时显示一条消息。如何为 useEffect 中的以下代码编写测试以确保消息正在显示/隐藏并且清理工作有效?
const { isConnected } = useContext(ConnectionContext);
...
useEffect(() => {
const snack = setTimeout(() => {
if (!isConnected) {
showMessage({
autoHide: false,
message: 'Please try again later',
});
}
}, 10000);
const hideSnack = setTimeout(() => {
if (isConnected) hideMessage();
}, 5000);
return () => {
clearTimeout(snack);
clearTimeout(hideSnack);
};
}, [isConnected]);
我尝试过类似的方法来检查应用程序是否已连接
jest.mock('@react-native-community/netinfo', () => ({
...jest.requireActual('@react-native-community/netinfo'),
useNetInfo: () => ({
isConnected: true,
})
}));
解决方案
您可以使用 jest fake timers 来控制时间:
在顶部使用
jest.useFakeTimers();
然后,当您需要提前一定数量的时间时,请使用:
jest.advanceTimersByTime(100);
推荐阅读
- ssms - Sqlpackage 抛出错误没有详细信息
- api - Microsoft Intune 设备操作的错误请求响应
- r - 处理一个data_frame:定义一个列的值何时改变一个单位
- xcode - Nativescript:警告:xcodeproj 未安装或配置不正确
- mysql - 如何修复 Azure MySQL 服务器上的“无法删除或更新父行”错误?
- python - 如何在pyspark中找到列的中位数?
- sql-server - 将主键中的两列与 SQL 中 1 列中的唯一字符连接起来
- python - 在函数定义中使用与在python中调用函数时使用的变量相同的名称是错误的吗
- python - ImportError:无法从“gensim.utils”导入名称“已弃用”
- forms - Symony:为每个元素渲染一个表单