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

使用Jest测试window.location.pathname时修改URL仍通过问题排查

问题根因
  • 你的测试逻辑属于自验证:你在测试用例内部手动给window.location.pathname赋值为目标路径/comparators/loans,随后直接断言该值等于你刚赋值的变量,全程没有和你实际的贷款页面、路由逻辑产生任何关联,无论真实页面的URL是什么,这个断言永远会成立,这是测试恒过的核心原因。
  • 你没有遵循Testing Library的测试流程:正常的页面路径校验需要先渲染对应的路由组件、页面组件,触发真实的路由匹配/跳转逻辑后,再读取当前路径做断言,而非手动伪造window对象的属性做无意义校验。
正确测试方案(以React + React Router v6为例)
import { render, screen, fireEvent } from '@testing-library/react'
import { MemoryRouter, Routes, Route } from 'react-router-dom'
// 替换为你项目内的贷款页面组件、入口组件路径
import LoansPage from './pages/LoansPage'
import App from './App'

describe('贷款页面路径校验', () => {
  // 场景1:校验贷款页对应路径是否匹配
  it('访问/comparators/loans路径时应渲染贷款页面', () => {
    render(
      <MemoryRouter initialEntries={['/comparators/loans']}>
        <Routes>
          <Route path="/comparators/loans" element={<LoansPage />} />
        </Routes>
      </MemoryRouter>
    )
    // 先校验贷款页面的独有元素存在,确认路由匹配正确,可替换为你页面的实际文本
    expect(screen.getByText('贷款对比')).toBeInTheDocument()
    // 再校验路径符合预期
    expect(window.location.pathname).toEqual('/comparators/loans')
  })

  // 场景2:校验交互后是否跳转到贷款页
  it('点击贷款入口按钮后应跳转到/comparators/loans路径', () => {
    render(
      <MemoryRouter initialEntries={['/']}>
        <App />
      </MemoryRouter>
    )
    // 触发跳转交互,元素定位规则可根据你的实际页面调整
    fireEvent.click(screen.getByRole('button', { name: '查看贷款对比' }))
    // 校验跳转后路径
    expect(window.location.pathname).toEqual('/comparators/loans')
  })
})

如果你使用的不是React技术栈,替换为对应框架的路由测试工具即可,核心逻辑保持不变:优先触发真实的渲染、路由匹配/跳转逻辑,再做路径断言,不要手动修改window.location后校验自己写入的固定值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:39:03