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

如何编写Nuxt服务端API路由测试以实现100%代码覆盖率?

解决Nuxt server/api/env.ts覆盖率0%的测试方案

核心问题分析

测试通过但覆盖率为0%,本质是测试未真正执行到server/api/env.ts的代码逻辑——要么是请求没正确命中该API路由,要么是Nuxt测试环境未加载这个文件,导致覆盖率工具无法捕获代码执行轨迹。

实现100%覆盖率的具体方案

1. 配置测试环境

确保项目已安装@nuxt/test-utils和测试框架(如vitest),并在nuxt.config.ts中指定覆盖率收集范围:

// nuxt.config.ts
export default defineNuxtConfig({
  test: {
    coverage: {
      provider: 'v8',
      include: ['server/**/*.ts'] // 明确要收集覆盖率的目录
    }
  }
})

2. E2E测试方案(推荐)

修改tests/server/api/env.test.ts,用Nuxt测试工具的setup和fetch方法触发真实路由:

// tests/server/api/env.test.ts
import { setup, fetch } from '@nuxt/test-utils/e2e'

describe('/api/env', () => {
  await setup({
    server: true,
    env: {
      NUXT_API_SECRET: 'test-secret-123' // 注入测试环境变量
    }
  })

  it('返回正确的NUXT_API_SECRET', async () => {
    const res = await fetch('/api/env')
    expect(res.status).toBe(200)
    
    const secret = await res.text()
    expect(secret).toBe('test-secret-123')
  })
})

3. 直接测试处理函数(备选)

如果E2E测试仍无法捕获覆盖率,可直接导入处理函数进行单元测试:

// tests/server/api/env.test.ts
import envHandler from '../../../server/api/env'
import { createEvent } from 'h3'

describe('env API处理函数', () => {
  it('返回process.env中的NUXT_API_SECRET', async () => {
    process.env.NUXT_API_SECRET = 'test-direct-secret'
    
    const event = createEvent()
    const result = await envHandler(event)
    
    expect(result).toBe('test-direct-secret')
    
    // 清理环境变量
    delete process.env.NUXT_API_SECRET
  })
})

4. 运行测试并生成覆盖率

执行命令时启用覆盖率收集:

npx nuxi test --coverage

关键注意事项

  • 必须确保测试执行到server/api/env.ts的每一行:process.env解构和返回值逻辑都要触发。
  • 若用vitest单独运行,需在vitest.config.ts中继承Nuxt测试配置,保证覆盖率范围正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:01