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

React Redux应用测试报错求助:无法解构'basename'

问题解决:TypeError: Cannot destructure property 'basename' of React__namespace.useContext(...) as it is null

这个报错和Redux store初始值无关,根源是你的App组件使用了react-router-dom的Routes/Route,但测试代码里没有提供路由上下文提供者。Routes组件依赖路由上下文来获取basename等配置,测试时未包裹路由容器的话,useContext会返回null,导致解构失败。

解决方案

修改App.test.js,导入react-router-dom的MemoryRouter(测试环境优先用这个,不需要浏览器history),并用来包裹App组件:

import React from 'react';
import { render } from '@testing-library/react';
import { Provider } from 'react-redux';
import { MemoryRouter } from 'react-router-dom'; // 新增导入
import { store } from './app/store';
import App from './App';

test('renders learn react link', () => {
  const { getByText } = render(
    <Provider store={store}>
      <MemoryRouter>
        <App />
      </MemoryRouter>
    </Provider>
  );

  expect(getByText(/learn/i)).toBeInTheDocument();
 });

说明

MemoryRouter是react-router-dom专为测试场景设计的路由容器,它在内存中模拟路由环境,不需要依赖浏览器的window.history对象,能给Routes/Route组件提供完整的路由上下文,从而解决basename解构的报错问题。

内容的提问来源于stack exchange,提问作者Richie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:22