스위트와 테스트에 대한 필터링, 타임아웃, 그리고 동시 실행 설정에 대해 알아볼까요?
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 # ❌ 이런 식의 범위 지정은 안 돼요
테스트의 세 번째 인자로 타임아웃 시간(밀리초 단위)을 넘겨줄 수 있어요. 따로 설정하지 않으면 기본값은 5초예요.
import { test } from 'vitest'
test('이름', async () => { /* ... */ }, 1000)
훅(Hooks)에도 타임아웃을 설정할 수 있고, 마찬가지로 기본값은 5초입니다.
import { beforeAll } from 'vitest'
beforeAll(async () => { /* ... */ }, 1000)
특정 스위트나 테스트를 실행하고 싶지 않을 때는 .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)
})
})
테스트에 태그(tag)를 정의했다면, --tags-filter 옵션으로 원하는 테스트만 골라낼 수 있어요.
test('폼 렌더링 테스트', { tags: ['frontend'] }, () => {
// ...
})
test('외부 API 호출 테스트', { tags: ['backend'] }, () => {
// ...
})
vitest --tags-filter=frontend
특정 스위트나 테스트만 딱 실행하고 싶을 때는 .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)
})
})
나중에 구현해야 할 스위트나 테스트가 있다면 .todo를 써서 기록해 두세요.
import { describe, it } from 'vitest'
// 리포트에 미구현 스위트로 표시됩니다
describe.todo('구현 예정인 스위트')
// 리포트에 미구현 테스트로 표시됩니다
describe('스위트', () => {
it.todo('구현 예정인 테스트')
})