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

Cypress测试无法捕获重定向后的XHR GET请求问题

解决Cypress测试中Inertia GET请求未捕获的问题

1. 修正Inertia请求的拦截规则

Inertia发起的导航请求会携带X-Inertia: true请求头,你的拦截器需要匹配这个特征才能正确捕获请求。修改拦截器代码:

cy.intercept('POST', '/auth/user').as('addUser')

// 匹配带Inertia头的GET请求
cy.intercept({
  method: 'GET',
  url: '/auth/project/create',
  headers: {
    'x-inertia': 'true'
  }
}).as('loadPage')

cy.get('#add-user-form').submit()

cy.wait('@addUser')
cy.wait('@loadPage')

如果URL带有查询参数(比如/auth/project/create?X-Inertia=true),可以用通配符匹配:

cy.intercept('GET', '/auth/project/create*').as('loadPage')

2. 验证Laravel控制器的重定向逻辑

确保控制器返回的重定向是Inertia兼容的,避免普通HTTP重定向导致浏览器刷新(而非Inertia内部导航):

// 新增用户后,返回Inertia兼容的重定向
return redirect()->route('project.create');
// 或者显式指定Inertia跳转
return Inertia::location(route('project.create'));

3. 优化断言的精确性

直接用cy.contains('Coltrane')可能因为页面元素未渲染完成或匹配到其他元素导致失败,建议指定选择器:

// 假设用户选择菜单的ID为user-select-menu
cy.get('#user-select-menu').contains('Coltrane')

4. 调试请求匹配情况

在Cypress测试运行时,打开Network面板,查看提交表单后的GET请求:

  • 确认请求URL是否和拦截器设置一致
  • 检查请求头是否包含X-Inertia: true
  • 确认请求状态是否为200(成功完成)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:45:22