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

Cypress 8.3.0无法捕获GraphQL fetch类型请求 现有方案无效求助

解决步骤

1. 开启Cypress fetch拦截实验配置

在项目根目录的cypress.json中添加如下配置,Cypress 8.x版本的fetch拦截默认属于实验能力,必须手动开启才会生效:

{
  "experimentalFetchPolyfill": true
}

2. 调整fetch polyfill注入时机

把polyfill代码放在cypress/support/index.js的最顶部,要早于所有其他导入代码,否则会因为应用的fetch初始化早于polyfill注入导致失效:

// 放在文件第一行,所有其他代码前
Cypress.on('window:before:load', (win) => {
  // 删除原生fetch,强制替换为Cypress可拦截的实现
  delete win.fetch;
  win.fetch = require('unfetch');
});

3. 修正Apollo Client配置

在你的React应用的Apollo Client初始化逻辑中,新增测试场景下的fetch绑定,避免Apollo内部封装的fetch脱离Cypress的监听范围:

import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';

const httpLink = createHttpLink({
  uri: `${process.env.REACT_APP_BACKEND_URL}/graphql`,
  // 测试环境下强制绑定全局window.fetch,保证Cypress可捕获
  fetch: window.Cypress ? window.fetch.bind(window) : fetch,
});

const client = new ApolloClient({
  link: httpLink,
  cache: new InMemoryCache(),
});

4. 检查拦截代码拼写错误

你提供的拦截代码中Cypress.env('backendpiUrl')存在拼写问题,大概率是少写了字母a,正确应为backendApiUrl,路径拼写错误会直接导致拦截失效。修正后的参考代码:

cy.intercept('POST', `${Cypress.env('backendApiUrl')}/graphql`, req => {
  if (req.body.operationName === 'updateItem') {
    req.alias = 'updateItemMutation';
  }
});

完成以上配置后重新运行测试,即可在Cypress网络面板中看到对应的fetch类型GraphQL请求,拦截逻辑也会正常生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:36:03