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

使用Hono开发Cloudflare Worker时,如何在Vitest中读取环境变量?

解决Hono + Cloudflare Worker Vitest测试环境变量读取问题

问题本质

Cloudflare Worker的环境变量并非挂载在process.env,而是通过Worker入口函数的env参数传递,wrangler dev会自动将.dev.vars变量注入该对象,但Vitest测试环境不会自动处理这个逻辑,直接访问c.env.FOOBAR会因env未定义报错。


解决方案

1. 调整Worker代码结构(确保可注入env)

确保Hono应用的路由逻辑依赖的env能从上下文正确获取,示例代码:

import { Hono } from 'hono'
const app = new Hono()

// 直接通过上下文的env访问变量,保持与Worker运行时一致
app.get('/', (c) => {
  return c.text(`FOOBAR: ${c.env.FOOBAR}`)
})

export default app

2. 测试时手动注入env对象

在Vitest测试中,构造包含环境变量的env对象,并通过Hono的请求方法传入:

import { describe, it, expect } from 'vitest'
import app from '../src/index'
import dotenv from 'dotenv'

// 加载.dev.vars中的变量(需先安装dotenv:npm i dotenv -D)
dotenv.config({ path: '.dev.vars' })

describe('Worker环境变量测试', () => {
  it('应正确读取FOOBAR', async () => {
    // 构造符合Worker规范的env对象
    const env = {
      FOOBAR: process.env.FOOBAR
    }

    // 传入env发起请求
    const res = await app.request('/', { env })
    expect(await res.text()).toBe(`FOOBAR: ${env.FOOBAR}`)
  })
})

3. 官方测试工具方案(更贴合Worker运行时)

使用Cloudflare官方的@cloudflare/vitest-pool-workers,让wrangler自动注入.dev.vars变量:

  1. 安装依赖:
npm i @cloudflare/vitest-pool-workers vitest -D
  1. 配置vitest.config.ts:
import { defineConfig } from 'vitest/config'

export default defineConfig({
  test: {
    pool: '@cloudflare/vitest-pool-workers',
    environment: 'cloudflare-workers',
  },
})
  1. 测试代码示例:
import { describe, it, expect } from 'vitest'
import app from '../src/index'
import { getMiniflareBindings } from '@cloudflare/vitest-pool-workers'

describe('Worker环境变量测试', () => {
  it('应正确读取FOOBAR', async () => {
    // 通过官方方法获取已注入的env
    const env = await getMiniflareBindings()
    const res = await app.request('/', { env })
    expect(await res.text()).toBe(`FOOBAR: ${env.FOOBAR}`)
  })
})
  1. 运行测试:
wrangler test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:26:07