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

