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

如何在Playwright中使用SvelteKit的$lib与$env别名?

解决Playwright中使用DrizzleORM数据库实例的$env导入错误

问题根源

Playwright运行在Node.js环境中,不识别SvelteKit内置的$env模块别名;你配置的tsconfig.json路径别名仅作用于TypeScript编译阶段,无法在运行时让Node解析$env导入。

解决方案

方案1:修改数据库连接文件,兼容测试环境

调整src/lib/server/db.ts的代码,根据环境切换配置来源:

import { connect } from "@planetscale/database";
import { drizzle } from "drizzle-orm/planetscale-serverless";

// 优先从Node环境变量读取,适配Playwright测试场景
const DB_HOST = process.env.DB_HOST || (await import("$env/static/private")).DB_HOST;
const DB_PASSWORD = process.env.DB_PASSWORD || (await import("$env/static/private")).DB_PASSWORD;
const DB_USERNAME = process.env.DB_USERNAME || (await import("$env/static/private")).DB_USERNAME;

const connection = connect({
  host: DB_HOST,
  username: DB_USERNAME,
  password: DB_PASSWORD,
});

export const db = drizzle(connection);

然后在Playwright配置文件(playwright.config.ts)中加载测试用环境变量:

import { defineConfig, devices } from '@playwright/test';
import dotenv from 'dotenv';

// 加载测试专属的环境变量文件
dotenv.config({ path: './tests/.env' });

export default defineConfig({
  // 其他Playwright配置项...
});

在tests/.env中填入测试数据库的配置:

DB_HOST=你的测试数据库地址
DB_PASSWORD=你的测试数据库密码
DB_USERNAME=你的测试数据库用户名

方案2:创建测试专用的数据库实例

直接在测试目录下新建独立的数据库连接文件(比如tests/e2e/utils/db.ts),完全避开SvelteKit的$env依赖:

import { connect } from "@planetscale/database";
import { drizzle } from "drizzle-orm/planetscale-serverless";

const connection = connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
});

export const testDb = drizzle(connection);

同样在Playwright配置中加载tests/.env,测试代码里直接导入这个testDb即可使用。

补充说明:为什么之前的tsconfig配置无效?

tsconfig.json的paths配置仅用于TypeScript编译器的类型检查和代码编译,不会修改Node.js运行时的模块解析逻辑。Playwright运行时依赖Node原生模块系统,它无法识别$env这个自定义别名,因此必须通过环境变量或代码逻辑调整来解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:34:52