使用Cypress拦截GraphQL请求时无法设置alias属性的问题
问题根因
你提供的aliasQuery、hasOperationName工具函数本身逻辑正确,别名不生效的核心问题是调用方式错误:
aliasQuery需要接收Cypress拦截到的请求对象req作为第一个入参才能给请求挂载别名,你直接在beforeEach里调用aliasQuery('myGraphQLQueryName'),只传入了operationName字符串,函数拿到的第一个参数根本不是请求对象,赋值操作自然不会生效。- 你没有将别名设置逻辑和
cy.intercept拦截器关联,请求发出时没有触发别名赋值逻辑。
修复方案
调整beforeEach内的逻辑,先注册GraphQL请求拦截器,再执行页面跳转操作,避免请求先于拦截器注册完成发出导致漏拦截:
beforeEach(() => { // 1. 先注册GraphQL请求拦截,替换下方的接口路径为你实际的GraphQL服务地址 cy.intercept('POST', '/你的/graphql/接口/路径', (req) => { // 2. 拦截到请求后,调用工具函数匹配operationName并设置别名 aliasQuery(req, 'myGraphQLQueryName') }) // 3. 拦截器注册完成后再跳转页面触发请求 cy.goToHomePage(); });
额外注意事项
- 若需要等待对应别名的请求返回,调用时需要和你设置的别名完全匹配:
cy.wait('@gqlmyGraphQLQueryNameQuery'),注意大小写敏感 - 若项目中GraphQL请求地址不固定,可以用通配符匹配:
cy.intercept('POST', '**/graphql', (req) => { ... }) - 所有触发请求的操作都必须放在拦截器注册逻辑之后执行,否则已经发出的请求无法被拦截到

内容的提问来源于stack exchange,提问作者Wilson Cazarré
相关产品推荐
相关产品推荐

