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

如何使用Vitest为SvelteKit项目编写单元测试并传值给组件?

为SvelteKit项目编写单元测试及About组件传值方法

以下是针对你项目中三个文件的单元测试方案,基于Vitest和svelte-testing-library实现:

1. 测试src/lib/index.js的add函数

创建测试文件tests/lib/index.test.js,直接测试函数逻辑:

import { describe, expect, it } from 'vitest';
import { add } from '$lib/index.js';

describe('add function', () => {
  it('计算两个数字的和', () => {
    expect(add(1, 2)).toBe(3);
    expect(add(-5, 10)).toBe(5);
    expect(add(0, 0)).toBe(0);
  });
});

2. 测试主页src/routes/+page.svelte

创建测试文件tests/routes/+page.test.js,验证页面内容渲染:

import { describe, expect, it } from 'vitest';
import { render, screen } from '@testing-library/svelte';
import Page from '$routes/+page.svelte';

describe('主页', () => {
  it('显示欢迎标题和文档链接提示', () => {
    render(Page);
    
    expect(screen.getByRole('heading', { name: /welcome to sveltekit/i })).toBeInTheDocument();
    expect(screen.getByText(/visit kit.svelte.dev to read the documentation/i)).toBeInTheDocument();
  });
});

3. 测试About页面src/routes/about/+page.svelte(含传值与交互)

创建测试文件tests/routes/about/+page.test.js,重点解决组件传值和双向绑定的测试:

传递自定义属性值

在渲染组件时,通过render函数的第二个参数传入props对象,即可给组件的export属性赋值:

import { describe, expect, it } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import AboutPage from '$routes/about/+page.svelte';

describe('About页面', () => {
  it('使用默认值渲染', () => {
    render(AboutPage);
    
    expect(screen.getByText('Hi bar!')).toBeInTheDocument();
    const input = screen.getByRole('textbox');
    expect(input).toHaveValue('bar');
  });

  it('接收自定义foo属性并正确显示', () => {
    // 通过props传递自定义值
    render(AboutPage, { props: { foo: '自定义内容' } });
    
    expect(screen.getByText('Hi 自定义内容!')).toBeInTheDocument();
    const input = screen.getByRole('textbox');
    expect(input).toHaveValue('自定义内容');
  });

  it('输入框修改值后同步更新显示', async () => {
    render(AboutPage);
    const input = screen.getByRole('textbox');
    const displayElement = screen.getByText(/hi /i);

    // 模拟用户输入
    await fireEvent.input(input, { target: { value: '新值' } });
    
    // 验证显示内容和输入框值同步更新
    expect(displayElement.textContent).toBe('Hi 新值!');
    expect(input).toHaveValue('新值');
  });
});

内容的提问来源于stack exchange,提问作者Péter Szilvási

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:12:44