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

如何修改vitest.config.js让单元测试识别SvelteKit的$app/navigation?

问题描述

我在+page.svelte中编写了如下Svelte代码:

import { goto } from "$app/navigation";

编写单元测试时导入该组件:

import myTest from "./+page.svelte"

但出现错误:

Error: Failed to resolve import "$app/navigation" from "src\routes\mariner+page.svelte". Does the file exist?

请问如何修改vitest.config.js,让单元测试能够识别SvelteKit的$app模块?

解决方案

你可以通过两种方式配置vitest.config.js来解决这个问题:

方式一:使用SvelteKit官方Vitest预设

  1. 先安装必要依赖(未安装的话):
npm install -D vitest-svelte-kit @testing-library/svelte
  1. 修改vitest.config.js:
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vitest/config';

export default defineConfig({
	plugins: [sveltekit()],
	test: {
		include: ['src/**/*.{test,spec}.{js,ts}'],
		environment: 'svelte',
		globals: true
	}
});

这个配置会自动处理SvelteKit的$app等内置模块的解析,无需手动模拟。

方式二:手动添加别名与模拟模块

如果不想使用官方预设,可以手动为$app模块配置别名并编写模拟代码:

  1. 修改vitest.config.js:
import { defineConfig } from 'vitest/config';
import path from 'path';

export default defineConfig({
	test: {
		include: ['src/**/*.{test,spec}.{js,ts}'],
		resolve: {
			alias: {
				'$app/navigation': path.resolve(__dirname, 'tests/mocks/app/navigation.js')
			}
		}
	}
});
  1. 在指定路径创建模拟文件tests/mocks/app/navigation.js,编写模拟逻辑:
import { vi } from 'vitest';
export const goto = vi.fn();

完成配置后重新运行单元测试,$app/navigation的导入即可被正确识别或模拟,不会再出现解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:18:16