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
相关产品推荐
相关产品推荐

