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

如何将Jest中mock useNavigate的代码放入__mocks__目录复用?

如何将React Router的useNavigate Mock放入__mocks__目录复用

完全可行,按以下步骤操作即可实现复用:

1. 创建全局Mock文件

在项目根目录下新建 __mocks__/react-router-dom.js 文件,内容如下:

const originalModule = jest.requireActual('react-router-dom');
// 导出可被测试文件调用的mock函数
export const mockedUseNavigate = jest.fn();

export default {
  ...originalModule,
  useNavigate: () => mockedUseNavigate,
};

这个文件会保留react-router-dom的所有原生导出,仅替换useNavigate为我们的mock函数,同时将mock函数暴露出来供测试断言使用。

2. 在测试文件中使用Mock

在需要测试导航逻辑的文件中,直接引入mock函数并使用:

import { render, screen } from '@testing-library/react';
import { mockedUseNavigate } from 'react-router-dom';
import YourComponent from './YourComponent';

// 每次测试前重置mock,避免测试间的状态污染
beforeEach(() => {
  mockedUseNavigate.mockReset();
});

test('触发按钮后跳转到指定路径', () => {
  render(<YourComponent />);
  
  // 触发组件中触发导航的操作,比如点击按钮
  screen.getByText('跳转').click();
  
  // 断言导航函数被正确调用
  expect(mockedUseNavigate).toHaveBeenCalledWith('myurl/user-1');
});

Jest会自动识别__mocks__目录下的文件,无需在每个测试文件中重复编写jest.mock('react-router-dom')(如果需要禁用全局mock,可在测试文件中添加jest.unmock('react-router-dom'))。

3. TypeScript 适配(可选)

如果项目使用TypeScript,需要添加类型声明文件__mocks__/react-router-dom.d.ts来避免类型错误:

import type * as ReactRouterDOM from 'react-router-dom';

declare module 'react-router-dom' {
  export const mockedUseNavigate: jest.Mock;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:25:16