You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:04:34