Test Filtering

김동현·2026년 3월 22일

테스트 필터링 (Test Filtering)

스위트와 테스트에 대한 필터링, 타임아웃, 그리고 동시 실행 설정에 대해 알아볼까요?

CLI

CLI를 사용하면 테스트 파일 이름으로 필터링을 할 수 있어요.

$ vitest basic

이렇게 입력하면 파일 경로에 basic이 포함된 테스트 파일들만 실행하게 돼요. 예를 들면 이런 파일들이죠:

basic.test.ts
basic-foo.test.ts
basic/foo.test.ts

또한 -t, --testNamePattern <pattern> 옵션을 사용하면 테스트의 전체 이름으로 필터링할 수도 있어요. 파일 이름이 아니라 파일 내부에 정의된 테스트 이름으로 찾고 싶을 때 아주 유용하답니다.

Vitest 3부터는 파일 이름과 줄 번호를 지정해서 특정 테스트를 콕 집어 실행할 수도 있어요.

$ vitest basic/foo.test.ts:10

경고
이 기능이 제대로 작동하려면 파일의 전체 이름을 적어줘야 한다는 점 주의하세요! 현재 작업 디렉토리 기준의 상대 경로도 괜찮고 절대 경로도 괜찮아요.

$ vitest basic/foo.js:10 # ✅ 가능!
$ vitest ./basic/foo.js:10 # ✅ 이것도 가능!
$ vitest /users/project/basic/foo.js:10 # ✅ 절대 경로도 오케이!
$ vitest foo:10 # ❌ 이건 안 돼요 (전체 이름이 아니라서요)
$ vitest ./basic/foo:10 # ❌ 확장자가 없으면 안 돼요

아쉽게도 지금은 범위를 지정하는 방식은 지원하지 않아요.

$ vitest basic/foo.test.ts:10, basic/foo.test.ts:25 # ✅ 이렇게 여러 개 적는 건 돼요
$ vitest basic/foo.test.ts:10-25 # ❌ 이런 식의 범위 지정은 안 돼요

타임아웃 지정하기 (Specifying a Timeout)

테스트의 세 번째 인자로 타임아웃 시간(밀리초 단위)을 넘겨줄 수 있어요. 따로 설정하지 않으면 기본값은 5초예요.

import { test } from 'vitest'

test('이름', async () => { /* ... */ }, 1000)

훅(Hooks)에도 타임아웃을 설정할 수 있고, 마찬가지로 기본값은 5초입니다.

import { beforeAll } from 'vitest'

beforeAll(async () => { /* ... */ }, 1000)

스위트와 테스트 건너뛰기 (Skipping Suites and Tests)

특정 스위트나 테스트를 실행하고 싶지 않을 때는 .skip을 사용해 보세요.

import { assert, describe, it } from 'vitest'

describe.skip('건너뛸 스위트', () => {
  it('테스트', () => {
    // 스위트 자체가 건너뛰어지므로, 이 에러는 발생하지 않아요
    assert.equal(Math.sqrt(4), 3)
  })
})

describe('스위트', () => {
  it.skip('건너뛸 테스트', () => {
    // 테스트가 건너뛰어지므로, 에러가 나지 않습니다
    assert.equal(Math.sqrt(4), 3)
  })
})

태그 필터링 (Filtering Tags)

테스트에 태그(tag)를 정의했다면, --tags-filter 옵션으로 원하는 테스트만 골라낼 수 있어요.

test('폼 렌더링 테스트', { tags: ['frontend'] }, () => {
  // ...
})

test('외부 API 호출 테스트', { tags: ['backend'] }, () => {
  // ...
})
vitest --tags-filter=frontend

실행할 스위트와 테스트 선택하기 (Selecting Suites and Tests to Run)

특정 스위트나 테스트만 딱 실행하고 싶을 때는 .only를 사용하세요.

import { assert, describe, it } from 'vitest'

// 이 스위트(와 .only가 붙은 다른 것들)만 실행돼요
describe.only('스위트', () => {
  it('테스트', () => {
    assert.equal(Math.sqrt(4), 3)
  })
})

describe('다른 스위트', () => {
  it('건너뛰어질 테스트', () => {
    // 전체가 Only 모드로 돌아가고 있으므로 이 테스트는 건너뜁니다
    assert.equal(Math.sqrt(4), 3)
  })

  it.only('테스트', () => {
    // 이 테스트(와 .only가 붙은 다른 것들)만 실행돼요
    assert.equal(Math.sqrt(4), 2)
  })
})

파일 필터와 줄 번호를 함께 써서 실행하는 방법도 잊지 마세요!

vitest ./test/example.test.ts:5
import { assert, describe, it } from 'vitest'

describe('suite', () => {
  // 오직 이 테스트만 실행됩니다
  it('test', () => {
    assert.equal(Math.sqrt(4), 3)
  })
})

미구현 스위트와 테스트 (Unimplemented Suites and Tests)

나중에 구현해야 할 스위트나 테스트가 있다면 .todo를 써서 기록해 두세요.

import { describe, it } from 'vitest'

// 리포트에 미구현 스위트로 표시됩니다
describe.todo('구현 예정인 스위트')

// 리포트에 미구현 테스트로 표시됩니다
describe('스위트', () => {
  it.todo('구현 예정인 테스트')
})
profile
프론트에_가까운_풀스택_개발자

0개의 댓글