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

Cypress Blob处理mkv文件报Failed to execute 'atob' on 'Window'错误

Cypress v10接口请求携带MKV文件报错解决方案

问题场景

接口测试需要在请求中携带MKV格式文件,初始实现代码如下:

cy.fixture('video.mkv').then(file => {
    const blob = Cypress.Blob.base64StringToBlob(file, "video/x-matroska")
    cy.request({
        method: ...
        url: ...
        body: blob,
    })
});

运行后抛出如下错误:

InvalidCharacterError
Failed to execute 'atob' on 'Window': The string to be decoded contains characters outside of the Latin1 range.

当前使用Cypress版本为v10.0.0,不确定处理MKV文件时是否需要做base64转Blob操作。

根因分析

报错核心原因是cy.fixture()默认以utf8文本编码读取文件,MKV属于二进制格式文件,按默认编码读取得到的内容不是合法base64字符串,传入Cypress.Blob.base64StringToBlob()方法后,底层依赖的atobAPI无法解析超出Latin1字符范围的内容,直接抛出异常。
处理MKV这类二进制文件不需要手动做base64转Blob操作,默认读取逻辑本身就不适合二进制文件场景。

修复方案

  • 调用cy.fixture()读取MKV文件时,传入第二个参数null指定编码,让Cypress直接返回二进制格式的Blob对象,跳过默认的文本解析逻辑
  • 根据接口的Content-Type要求,直接使用返回的Blob对象构造请求体即可,不需要额外做格式转换

修复后的参考代码:

// 读取二进制文件时指定encoding为null,直接拿到对应Blob对象
cy.fixture('video.mkv', null).then(fileBlob => {
  // 场景1:接口要求直接传二进制流
  cy.request({
    method: 'POST', // 替换为实际请求方法
    url: '/your/target/api', // 替换为实际接口地址
    body: fileBlob,
    headers: {
      'Content-Type': 'video/x-matroska'
    }
  })

  // 场景2:接口要求multipart/form-data表单上传
  // const formData = new FormData()
  // formData.append('fileField', fileBlob, 'video.mkv') // fileField替换为接口实际的文件参数字段名
  // cy.request({
  //   method: 'POST',
  //   url: '/your/target/api',
  //   body: formData
  // })
})

该写法是Cypress v10版本处理二进制fixture文件的标准实现,可完全规避atob解析字符范围不匹配的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:51:23