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

如何在Vitest中为SvelteKit项目配置测试环境变量?

解决SvelteKit测试中环境变量未加载的问题

问题原因

你使用的$env/dynamic/private是SvelteKit运行时动态读取环境变量的方式,而Vitest的test.env配置不会自动注入到这个模块的env对象中,导致测试时无法获取到配置的APP_PASSWORD。

解决方案

方案1:Mock $env/dynamic/private模块

在测试文件中直接mock该模块,返回测试所需的环境变量:

// 在你的测试文件顶部添加
vi.mock("$env/dynamic/private", () => ({
  env: {
    APP_PASSWORD: "testing password",
    FILE_DIRECTORY: "test/files" // 可选,根据测试需求设置
  }
}));

// 之后导入config模块
import { config } from "$lib/config"; // 替换成你的config.ts实际路径

// 编写测试用例
test("config loads correctly in test", () => {
  expect(config.password).toBe("testing password");
});

方案2:使用测试专用.env文件

  1. 在项目根目录创建.env.test文件,添加测试用的环境变量:
APP_PASSWORD=testing password
FILE_DIRECTORY=test/files
  1. 修改vite.config.ts,在测试模式下加载这个.env文件:
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vitest/config';
import { loadEnv } from 'vite';

export default defineConfig(({ mode }) => {
  // 加载对应模式的env文件
  const env = loadEnv(mode, process.cwd(), '');
  
  return {
    plugins: [sveltekit()],
    resolve: process.env.VITEST ? { conditions: ['browser'] } : undefined,
    test: {
      include: ["./test/**/*.ts"],
      // 将加载的env注入到测试环境
      env: { ...env }
    }
  };
});

运行测试时需要指定模式为test,比如执行vitest --mode test。

方案3:改用$env/static/private(如果适合你的场景)

如果你的配置不需要运行时动态更新,可以改用静态环境变量:

  1. 修改config.ts:
import { APP_PASSWORD, FILE_DIRECTORY } from "$env/static/private";

function getOrThrow(propertyName: string, optionalValue: string | undefined): string {
  if (optionalValue === undefined) {
    throw new Error(`[ ${propertyName} ] was not set in .env file!`);
  }
  return optionalValue;
}

export const config = {
  password: getOrThrow("APP_PASSWORD", APP_PASSWORD),
  fileDirectory: FILE_DIRECTORY ?? "dist/files"
};

此时Vitest的test.env配置会正确注入到$env/static/private导出的变量中,不需要额外修改测试代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 11:42:33