原文链接:https://blog.jijian.link/2020-08-03/cypress-zepto-ajax-response-null/

如果你项目有如下几个巧合,大概率会发现一个 ajax 请求返回为 null 的 bug:

  1. 如果你的项目是移动端项目,刚好使用了 zepto.js。

  2. 还刚好使用了 $.ajax 发送 ajax 请求。

  3. 刚好又使用了 cy.route。

问题原因

对比正常 network 请求会发现少了好几个字段,少的字段如下:

X-Cypress-Delay: 0
X-Cypress-Id: xhr10
X-Cypress-Matched: **/testCyPress*
X-Cypress-Response: %7B%22code%22:%22111111%22,%22info%22:%22%E6%88%90%E5%8A%9F%22%7D
X-Cypress-Status: 200

查看 zepto ajax 源码 会发现有这么一行代码: https://github.com/madrobby/zepto/blob/master/src/ajax.js#L254

xhr.setRequestHeader = setHeader // xhr = new window.XMLHttpRequest()

就这么一行代码,改变了 XMLHttpRequest 的默认的 setRequestHeader 方法,导致 CyPress 测试请求发送的 Request Headers 少了好几个字段,进而导致返回数据为 null

处理办法

删除源码中的 xhr.setRequestHeader = setHeader 即可。

如果使用的 CDN ,比如 https://cdn.bootcdn.net/ajax/libs/zepto/1.2.0/zepto.js ,删除1465 行问题代码 xhr.setRequestHeader = setHeader 即可。

cypress route 拦截 zepto ajax 请求时候 response 返回 null 问题原因的更多相关文章

  1. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

  2. js拦截全局ajax请求

    你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...

  3. js 拦截全局 ajax 请求

    你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...

  4. 使用CEfSharp之旅(6)拦截网络请求 截取response返回

    原文:使用CEfSharp之旅(6)拦截网络请求 截取response返回 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 我的群里问 https ...

  5. ajax请求、servlet返回json数据

    ajax请求.servlet返回json数据 1.方式一 response.setcontenttype("text/html;charset=utf-8"); response. ...

  6. AJAX请求时status返回状态明细表(转)

    转自:http://www.cnblogs.com/wangking/p/6530904.html AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18: ...

  7. AJAX请求时status返回状态明细表

    AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18:24对于readyState的五种状态的描述或者说定义,很多Ajax书(英文原版)中大都语焉不详 在 ...

  8. 一次ajax请求导致status为canceled的原因小记

    偶然碰到一个小Bug ajax请求执行后返回了一个canceled(状态码) 但是后台却接受了参数并且执行成功0.0 刚看到这个状态的时候是一脸懵逼的.... 之前并没见过这样的状态码 经过参数确认并 ...

  9. ajax请求后台,返回json格式数据,模板!

    添加一个用户的时候,需要找出公司下所有的部门,和相应部门下的角色,利用ajax请求,实现联动技术.将返回的json格式数据,添加到select标签下. <script type="te ...

  10. AJAX请求状态码返回200却跳到error的function

    最近在搞公司的项目时,发现了一个神奇的问题,就是AJAX请求成功,却莫名其妙的不返回到success函数中,而是跳到了error函数中.公司的项目是ASP.NET,这个和用的什么语言没有多大关系,只要 ...

随机推荐

  1. mybatis-plus多表联合分页查询

    1.entity层要写个Vo实体类 2.controller @AutoLog(value = "员工CURD-分页列表查询")@ApiOperation(value=" ...

  2. 问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题

    解决:Opencv(3.1.0/3.4/4.1.0)找不到 /opencv2/gpu/gpu.hpp 问题 环境: 系统:Win10 环境:Opencv3.4.0/4.1.0 显卡:1080ti 问题 ...

  3. [转]为什么VS提示SurfFeatureDetector不是cv的成员函数

    surf和sift算法都是在头文件#include <opencv2/features2d/features2d.hpp>中,但在新的opencv版本出来后,如果仍然使用这个头文件就会出现 ...

  4. 《Hough变换及其在信息处理中的应用》电子书下载

    <Hough变换及其在信息处理中的应用>电子书下载:百度云盘,  提取码:9zyi

  5. svtools prune具体算法

    svtools具有不同的子命令以实现不同的功能,其中一个就是lmerge.根据其help信息(cluster and prune a BEDPE file by position based on a ...

  6. 深入解析 Spring AI 系列:项目结构一览

    从今天起,我们将以 Spring AI 为主线,开始更新一系列的文章.这些文章将围绕 Spring AI 项目展开,结合我的理解,深入讲解其相关的知识点.技术原理.以及在实际开发过程中涉及到的部分代码 ...

  7. MSXML2.DOMDocument加载Internet资源

    MSXML2.DOMDocument加载Internet资源 The information in this article applies to: Microsoft XML, versions 2 ...

  8. Java虚拟机调优-典型配置举例

    背景: 以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的 ...

  9. biancheng-Pygame(python)

    http://c.biancheng.net/pygame/ Python Pygame 是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows.Linux.Mac OS 等操作系统 ...

  10. 项目PMP之十项目沟通管理

    项目PMP之十--项目沟通管理   一.定义:通过正式或非正式途径信息有效交换获取想法.指示或情绪:向大家说明项目进度现状(即工作绩效报告) 成功的沟通:适合的沟通策略:信息传递需要恰当:理解正确:筛 ...