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

React Jest测试中如何创建有效的Blob对象?

在Jest中创建有效的Blob对象解决方法

嘿,别担心,作为新手遇到这个问题太正常啦!你说得没错,Jest默认运行在Node.js环境中,而Node本身并没有实现浏览器原生的Blob对象,所以直接用new Blob()会得到一个简化的模拟对象(就是你看到的Blob {}),它没有浏览器里Blob的完整属性和行为。下面给你几种实用的解决办法:

方法一:用jsdom模拟浏览器环境

jsdom是一个在Node中模拟浏览器DOM的库,它包含了Blob的完整实现。

  1. 先安装依赖:
npm install --save-dev jsdom
  1. 在你的测试文件顶部添加以下代码,或者配置到Jest的全局设置文件(比如setupFilesAfterEnv):
import { JSDOM } from 'jsdom';

// 创建一个模拟的DOM环境
const dom = new JSDOM('<!doctype html>');
// 将jsdom的Blob挂载到全局对象,这样测试里就能直接用new Blob了
global.Blob = dom.window.Blob;

之后再运行你的代码,console.log(myBlob)就能看到带有size、type等属性的正常Blob对象了。

方法二:手动模拟Blob(轻量版)

如果只需要满足基本测试需求,不想引入额外库,可以手动写一个简单的Blob模拟类:

// 在测试文件的最开头添加这个模拟
global.Blob = class Blob {
  constructor(parts, options) {
    this.parts = parts;
    this.type = options?.type || '';
    // 计算内容大小(这里简单处理,假设parts是字符串数组)
    this.size = parts.reduce((total, part) => total + part.length, 0);
  }
};

这样创建的Blob对象会包含你需要的基本属性,console.log时也能看到这些内容,足够应对大多数简单测试场景。

方法三:用Node的Buffer替代(适合Node环境场景)

如果你的代码不需要严格的Blob对象,也可以用Node原生的Buffer来替代,因为Buffer和Blob在处理二进制数据上很相似:

// 用Buffer创建二进制数据(你的字符串是base64格式,所以指定编码)
const imageBuffer = Buffer.from(`/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/ 2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/`, 'base64');

// 如果你的业务代码必须接收Blob,也可以把Buffer包装成模拟Blob
const myBlob = new Blob([imageBuffer], { type: 'image/jpeg' });

补充说明:你之前看到的Blob {}并不是真的空对象,只是Jest默认的模拟实现没有把内部属性暴露出来让console打印。用上面任意一种方法,都能让你创建出在测试中可用的Blob对象。

慢慢来,测试环境和浏览器环境的差异是新手常踩的坑,多试几次就熟练啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:57:41