React应用中errorCallback测试时无法记录错误消息的问题求助
React应用中errorCallback测试时无法记录错误消息的问题求助
大家好,我刚接触编程和React开发,最近在写一个获取用户地理位置的功能,已经实现了基础的错误处理逻辑,但在写测试的时候卡壳了——模拟地理定位错误后,页面上始终不显示预期的错误消息,测试一直失败,想请各位帮忙看看问题出在哪。
先贴一下我组件里处理地理定位的相关代码:
const getLocation = () => { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successCallback, errorCallback, { }); } }; const errorCallback = (error) => { switch (error.code) { case error.PERMISSION_DENIED: setErrorMessage(error.message); break; default: setErrorMessage(""); break; } }; return ( <div> {errorMessage && <p>{errorMessage}</p>} </div> ); }
然后是我写的测试代码,我模拟了浏览器的地理定位API,想验证错误回调的处理逻辑:
import { render, screen, waitFor, act } from '@testing-library/react'; import App from './App'; // 已根据我的文件结构调整导入路径 // 模拟地理定位API global.navigator.geolocation = { getCurrentPosition: jest.fn() }; test('handles geolocation error', async () => { // 模拟getCurrentPosition触发错误回调,返回PERMISSION_DENIED错误 global.navigator.geolocation.getCurrentPosition.mockImplementationOnce((success, error) => { error({ code: 1, // 对应PERMISSION_DENIED的错误码 message: "User denied Geolocation" }); }); render(<App />); // 等待页面出现错误消息 await waitFor(() => { expect(screen.getByText("User denied Geolocation")).toBeInTheDocument(); }); });
我遇到的具体问题是:运行这个测试时,waitFor会超时,始终找不到对应的错误文本。我检查了errorCallback里的逻辑,看起来是正确的——当错误码是PERMISSION_DENIED时会调用setErrorMessage,但测试就是不通过。会不会是我mock的方式有问题?或者组件里的getLocation函数没有被正确触发?
备注:内容来源于stack exchange,提问作者AriN
相关产品推荐
相关产品推荐

