본문으로 바로가기
제품데스크톱 도구TASTECAD도면 확인TASTEFILES파일 관리TASTEFTP파일 전송TASTESSH원격 작업공간TASTEZIP압축과 해제개발 도구TASTECODERust 통합 개발 환경TASTESTUDIO통합 개발·테스트 환경TASTEETL데이터 통합(ETL)서버TASTEREMOTE원격 데스크톱 서버TASTEGEO공간정보 서버TASTEMAIL메일 작업공간시작하기다운로드문서구매모든 제품
마켓플레이스
소식
개발소식오늘의 개발 소식개발 문서프로그래밍 언어RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron알고리즘알고리즘 기초알고리즘 핵심알고리즘 심화실무 알고리즘
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스커뮤니티 안내
협업기술 전수홈페이지 구축데스크톱 앱 구축릴리스·결제 파이프라인판매 파트너문의
서비스원격 데스크톱설치 패키지 커스텀
TASTEDEV
제품

데스크톱 도구

TASTECAD복잡한 도면을 가볍게 열다TASTEFILES필요한 파일만, 가장 빠르게TASTEFTP파일이 오가는 가장 단정한 길TASTESSH서버와 나 사이, 더 단단한 연결TASTEZIP더 빠르게 묶고, 더 안전하게 풀다

개발 도구

TASTECODERust 앱을 편집 · 빌드 · 디버깅 · 테스트까지 한 창에서TASTESTUDIO편집부터 원격 테스트와 승인 기반 AI 수정까지TASTEETL값을 보며 데이터를 옮깁니다

서버

TASTEREMOTE우리 회사 서버로 운영하는 원격 데스크톱TASTEGEOGeoServer 호환 공간정보 서버를 Rust로 다시 세웁니다TASTEMAIL메일의 주도권을 다시 내 손에

시작하기

다운로드모든 제품 최신 판문서제품 사용법구매구독 · 영구 라이선스모든 제품모든 제품 한눈에
모든 제품
마켓플레이스소식
개발

소식

오늘의 개발 소식언어 · 프레임워크 · GitHub · AI 공식 발표개발 문서언어 · 프레임워크 · 알고리즘 안내서

프로그래밍 언어

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

프레임워크

프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular
서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express
앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron

알고리즘

알고리즘 기초복잡도 분석 · 정렬 · 탐색 · 기본 자료구조 · 트리와 힙알고리즘 핵심그래프 탐색 · 최단 경로와 최소 신장 트리 · 동적 계획법 · 탐욕 알고리즘 · 분할 정복 · 백트래킹알고리즘 심화문자열 알고리즘 · 수학과 정수론 · 비트 연산 · 구간 트리 · 유니온 파인드실무 알고리즘코딩 면접 풀이 전략 · LRU 캐시 · 레이트 리미터 · 일관된 해시
개발 문서 전체 보기
커뮤니티
프로젝트빌더와 작업 발견개발 로그결정과 시행착오프롬프트재사용 가능한 지시AI 도구 이슈Claude · Codex · Gemini 문제와 우회법쇼케이스완성된 결과커뮤니티 안내공개하고 함께 만드는 방식
협업
기술 전수Rust·egui 네이티브 앱 만들기홈페이지 구축10개 언어, 계정, 문서·다운로드데스크톱 앱 구축Rust·egui, WebView 없이릴리스·결제 파이프라인서명 · MSI·deb·rpm·AppImage · 해시판매 파트너소개하고 결제액의 30% 받기문의구축 · 제휴 · 투자 문의
서비스
원격 데스크톱브라우저로 내 컴퓨터에 접속설치 패키지 커스텀필요한 기능만, 설정은 미리
구매
KO
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
로그인
로그인
TASTEDEV

작은 도구부터, 더 좋은 개발까지.

support@tastedev.netTASTEDEV 후원하기
제품제품군구매문서다운로드마켓플레이스고객 지원
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스
정책개인정보처리방침이용약관구독 약관환불 정책커뮤니티 운영 정책
계정로그인가입하기
방문자
오늘
012345678901234567890123456789012345678901234567890123456789
어제
012345678901234567890123456789012345678901234567890123456789
누적 조회
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
상호
지엑스소프트
대표자
최영구
사업자등록번호
853-44-00368
주소
인천광역시 미추홀구 경인로 351 9층 V24
전화
+82-10-4404-1523
이메일
whitecalvin@tastedev.net
개인정보 보호책임자
최영구

© 2026 TASTEDEV제품 정보는 현재 검증된 개발 소스를 기준으로 합니다.출시·고도화 중

SvelteKit 문서
SvelteKit
SvelteKit 시작하기프로젝트 구조핵심 개념데이터와 상태테스트빌드와 배포
토론

SvelteKit 안내서 · 5/6

테스트

SvelteKit 프로젝트는 보통 두 가지 도구로 테스트합니다. 함수와 컴포넌트는 Vite와 같은 설정을 쓰는 Vitest로, 실제 브라우저에서 앱 전체가 동작하는지는 Playwright로 확인합니다.

테스트 도구 추가

sv 추가 기능으로 두 도구를 한 번에 설정할 수 있습니다.

npx sv add vitest playwright

npm run test:unit   # Vitest
npm run test:e2e    # Playwright

vitest 추가 기능은 필요한 패키지와 package.json 스크립트, 그리고 서버 코드와 클라이언트 코드를 나눠 실행하는 Vite 테스트 설정을 만들어 줍니다. 추가 기능이 만드는 구성은 sv 판에 따라 달라질 수 있으므로, 실행 뒤 vite.config.ts와 package.json을 한 번 열어 확인하세요. 아래에서는 Svelte 공식 문서가 설명하는 jsdom과 Testing Library 구성을 기준으로 합니다.

일반 함수 단위 테스트

src/lib의 순수 함수는 그대로 가져와 검사합니다. 테스트 파일은 보통 대상 파일 옆에 *.test.ts나 *.spec.ts로 둡니다.

// src/lib/price.ts
export function formatPrice(won: number) {
  return `${won.toLocaleString('ko-KR')}원`;
}

// src/lib/price.test.ts
import { describe, expect, it } from 'vitest';
import { formatPrice } from './price.js';

describe('formatPrice', () => {
  it('천 단위로 쉼표를 넣는다', () => {
    expect(formatPrice(12500)).toBe('12,500원');
  });
});

룬을 쓰는 코드 테스트

$state 같은 룬은 .svelte와 .svelte.ts 파일 안에서만 컴파일됩니다. 룬을 쓰는 로직을 테스트하려면 테스트 파일 이름을 *.svelte.test.ts로 짓습니다.

// src/lib/counter.svelte.ts
export function createCounter() {
  let count = $state(0);
  const double = $derived(count * 2);
  return {
    get count() { return count; },
    get double() { return double; },
    increment() { count += 1; }
  };
}
// src/lib/counter.svelte.test.ts
import { expect, test } from 'vitest';
import { createCounter } from './counter.svelte.js';

test('증가하면 두 배 값도 따라 바뀐다', () => {
  const counter = createCounter();
  expect(counter.double).toBe(0);

  counter.increment();
  expect(counter.count).toBe(1);
  expect(counter.double).toBe(2);
});

$effect가 들어간 코드를 시험할 때는 $effect.root로 감싸고, 효과를 바로 실행하려면 svelte의 flushSync()를 부릅니다.

컴포넌트 테스트

컴포넌트는 jsdom 환경에서 Testing Library로 렌더링하고, 사용자가 보는 기준(역할, 글자)으로 요소를 찾아 검사합니다.

npm install -D jsdom @testing-library/svelte @testing-library/user-event @testing-library/jest-dom
// vite.config.ts 의 일부
export default defineConfig({
  plugins: [sveltekit({ adapter: adapter() })],
  test: {
    environment: 'jsdom',
    setupFiles: ['./vitest-setup.ts']
  },
  resolve: process.env.VITEST ? { conditions: ['browser'] } : undefined
});

resolve.conditions의 browser는 테스트 중에 Svelte의 브라우저용 코드가 쓰이도록 하는 설정이고, vitest-setup.ts에는 import '@testing-library/jest-dom/vitest'; 한 줄을 넣어 toHaveTextContent 같은 검사 함수를 추가합니다. defineConfig는 vitest/config에서 가져오면 test 항목의 타입도 맞춰집니다.

// src/lib/components/Counter.test.ts
import { render, screen } from '@testing-library/svelte';
import userEvent from '@testing-library/user-event';
import { expect, test } from 'vitest';
import Counter from './Counter.svelte';

test('버튼을 누르면 숫자가 오른다', async () => {
  const user = userEvent.setup();
  render(Counter, { props: { initial: 1 } });

  const button = screen.getByRole('button');
  await user.click(button);
  expect(button).toHaveTextContent('2');
});

load 함수와 폼 액션은 평범한 비동기 함수이므로, 필요한 인자만 담은 가짜 이벤트 객체를 넘겨 호출하고 돌려준 값을 검사할 수 있습니다.

Playwright로 E2E 테스트

Playwright는 빌드한 앱을 미리 보기 서버로 띄운 뒤 실제 브라우저로 조작합니다. sv add playwright가 만드는 설정은 다음과 비슷합니다.

// playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
  webServer: {
    command: 'npm run build && npm run preview',
    port: 4173
  },
  testDir: 'tests'
});
// tests/home.test.ts
import { expect, test } from '@playwright/test';

test('첫 화면에 제목이 보인다', async ({ page }) => {
  await page.goto('/');
  await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
});

처음 실행할 때는 npx playwright install로 브라우저를 내려받아야 합니다. 폼 액션처럼 서버와 브라우저가 함께 동작하는 흐름은 E2E 테스트로 확인하는 것이 가장 확실합니다.

정리

  • npx sv add vitest playwright로 테스트 도구를 설정합니다.
  • 함수와 룬 로직은 Vitest로, 룬을 쓰는 테스트 파일은 .svelte.test.ts로 짓습니다.
  • 컴포넌트는 jsdom과 Testing Library로 사용자 관점에서 검사합니다.
  • 앱 전체 흐름은 빌드 결과를 띄운 Playwright 테스트로 확인합니다.
이 장에 대해 질문이 있나요?
이전 장데이터와 상태다음 장빌드와 배포

댓글 0개

인기 댓글순최신순

로그인 · 로그인하면 댓글을 남길 수 있습니다.