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

Vitest测试Cloudflare Workers时如何读取文件数据并操作R2桶?

解决方案

1. 直接使用开发/测试R2桶进行测试

完全可以直接用开发环境的R2桶做测试,但建议专门创建一个测试用的R2桶(或给测试数据加统一前缀,比如test-),避免污染生产/开发数据。

实现步骤:

  • 在Vitest配置文件(vitest.config.ts)中指定测试环境为Cloudflare Workers,并注入R2绑定:
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    environment: 'cloudflare-workers',
    environmentOptions: {
      bindings: {
        TEST_R2_BUCKET: {
          type: 'r2',
          name: '你的测试R2桶名称'
        }
      }
    }
  }
});
  • 在测试文件中直接操作绑定的桶:
import { describe, beforeEach, test } from 'vitest';

describe('Worker R2 交互测试', () => {
  const bucket = globalThis.TEST_R2_BUCKET;

  beforeEach(async () => {
    // 测试前清空测试前缀的文件(可选,避免数据残留)
    const objects = await bucket.list({ prefix: 'test-' });
    await Promise.all(objects.objects.map(obj => bucket.delete(obj.key)));
  });

  test('验证文件读取逻辑', async () => {
    // 上传测试数据
    await bucket.put('test-sample.json', JSON.stringify({ id: 1, content: 'test' }));
    // 调用Worker逻辑并断言结果
  });
});

如果需要连接真实的Cloudflare R2服务,可通过@cloudflare/r2-client创建客户端:

import { R2Client } from '@cloudflare/r2-client';

const r2Client = new R2Client({
  accountId: '你的Cloudflare账号ID',
  accessKey: '你的R2访问密钥',
  secretKey: '你的R2密钥'
});

const testBucket = r2Client.bucket('你的测试R2桶名称');

2. 解决JSON测试数据读取问题

Worker模拟环境不支持require或CommonJS语法,改用**ES模块规范的fetch+import.meta.url**读取本地JSON文件:

async function loadTestData() {
  const dataUrl = new URL('./test-compare-data.json', import.meta.url);
  const response = await fetch(dataUrl);
  return await response.json();
}

// 在测试前置钩子中加载并上传数据
beforeEach(async () => {
  const testCompareData = await loadTestData();
  await bucket.put('test-compare.json', JSON.stringify(testCompareData));
});

这种方式完全符合Worker运行环境规范,不会触发require()未实现的错误。

3. 用Wrangler本地模拟R2(可选)

如果不想连接真实R2桶,可使用Wrangler的本地模拟功能:

  • 安装Wrangler:npm install wrangler -D
  • 在wrangler.toml中配置本地R2桶:
[[r2_buckets]]
name = "TEST_R2_BUCKET"
preview_bucket_name = "TEST_R2_BUCKET"
  • 启动本地模拟服务:wrangler dev --local
  • 测试时Vitest会自动连接本地模拟的R2桶,无需配置真实密钥,适合快速迭代测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:56:08