reactjs - 类型错误 : Cannot read property 'location' of undefined (jest)

标签 reactjs unit-testing react-router jestjs enzyme

我有一个简单的组件,它使用来自 React Router 的 useLocation 钩子(Hook)。

//应用程序.jsx

import React from 'react';
import { useLocation } from 'react-router-dom';

function App() {
  const location = useLocation();
  const pathName = location.pathname;
  useEffect(() => {
    // Use pathName here
  }, [pathName]);
}

//App.test.js

import App from './App';

describe('App component', () => {
  it('Renders correctly', () => {
    const wrapper = shallow(<App />);

    expect(wrapper).toMatchSnapshot();
  });
});

//更新 App.test.js(使用 jest mock)

import App from './App';

describe('App component', () => {
  jest.mock('react-router-dom', () => ({
    useLocation: jest.fn().mockReturnValue({
      pathname: '/another-route',
      search: '',
      hash: '',
      state: null,
      key: '5nvxpbdafa',
    }),
  }));

  it('Renders correctly', () => {
    const wrapper = shallow(<App />);

    expect(wrapper).toMatchSnapshot();
  });
});

你能告诉我如何解决这个问题吗?谢谢。

最佳答案

只需移动您的jest.mock声明到文件顶部,它应该可以工作:

import App from './App';

jest.mock('react-router-dom', () => ({
    useLocation: jest.fn().mockReturnValue({
      pathname: '/another-route',
      search: '',
      hash: '',
      state: null,
      key: '5nvxpbdafa',
    }),
}));

describe('App component', () => {
  it('Renders correctly', () => {
    const wrapper = shallow(<App />);

    expect(wrapper).toMatchSnapshot();
  });
});

关于reactjs - 类型错误 : Cannot read property 'location' of undefined (jest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60233907/

相关文章:

javascript - 使用本地存储将具有动态键的数据存储在嵌套对象中

java - 模拟与实现。如何在单个测试类中共享这两种方法?

reactjs - 如何将旧的 react-router HashRouter(带有 #)重定向到 BrowserRouter?

react-router - 使用 React Router 进行转换/重定向的真正正确方法是什么?

javascript - JestJS:如何测试 catch() 的状态值

javascript - 在expressjs上动态转译和服务React应用程序

javascript - React-redux 存储状态和 mapStateToProps 状态不同的原因是什么?

javascript - Angular 2 - Protractor 测试 : Cannot find name 'element' and 'name'

python - django 应用程序的夜间单元测试

reactjs - 通过React Router中的Link传递对象