다중 설정
Vitest 3부터는 새로운 browser.instances
옵션을 사용하여 여러 브라우저 설정을 지정할 수 있습니다.
browser.instances
를 테스트 프로젝트 대신 사용하는 주된 장점은 캐싱이 향상된다는 점입니다. 모든 프로젝트는 동일한 Vite 서버를 사용하므로 파일 변환과 의존성 사전 번들링이 한 번만 수행됩니다.
여러 브라우저
browser.instances
필드를 사용하여 여러 브라우저에 대한 옵션을 지정할 수 있습니다. 예를 들어, 동일한 테스트를 여러 브라우저에서 실행하려면 최소 설정은 다음과 같습니다.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
browser: {
enabled: true,
provider: 'playwright',
headless: true,
instances: [
{ browser: 'chromium' },
{ browser: 'firefox' },
{ browser: 'webkit' },
],
},
},
});
다른 설정
브라우저와 독립적으로 다른 설정 옵션을 지정할 수도 있습니다(인스턴스에 browser
필드를 포함할 수도 있습니다).
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
browser: {
enabled: true,
provider: 'playwright',
headless: true,
instances: [
{
browser: 'chromium',
name: 'chromium-1',
setupFiles: ['./ratio-setup.ts'],
provide: {
ratio: 1,
},
},
{
browser: 'chromium',
name: 'chromium-2',
provide: {
ratio: 2,
},
},
],
},
},
});
import { expect, inject, test } from 'vitest';
import { globalSetupModifier } from './example.js';
test('ratio works', () => {
expect(inject('ratio') * globalSetupModifier).toBe(14);
});
이 예시에서 Vitest는 모든 테스트를 chromium
브라우저에서 실행하지만, 첫 번째 설정에서만 './ratio-setup.ts'
파일을 실행하며 provide
필드에 따라 다른 ratio
값을 주입합니다.
WARNING
동일한 브라우저 이름을 사용하는 경우 사용자 지정 name
값을 정의해야 합니다. 그렇지 않으면 Vitest가 browser
를 프로젝트 이름으로 할당합니다.
필터링
--project
플래그를 사용하여 실행할 프로젝트를 필터링할 수 있습니다. Vitest는 수동으로 지정되지 않은 경우 브라우저 이름을 프로젝트 이름으로 자동 할당합니다. 루트 구성에 이미 이름이 있는 경우 Vitest는 이를 병합합니다: custom
-> custom (browser)
.
$ vitest --project=chromium
export default defineConfig({
test: {
browser: {
instances: [
// name: chromium
{ browser: 'chromium' },
// name: custom
{ browser: 'firefox', name: 'custom' },
]
}
}
})
export default defineConfig({
test: {
name: 'custom',
browser: {
instances: [
// name: custom (chromium)
{ browser: 'chromium' },
// name: manual
{ browser: 'firefox', name: 'manual' },
]
}
}
})
WARNING
Vitest는 headless
모드가 false
로 설정된 여러 인스턴스(기본 동작)를 동시에 실행할 수 없습니다. 개발 중에는 터미널에서 실행할 프로젝트를 선택할 수 있습니다.
? Found multiple projects that run browser tests in headed mode: "chromium", "firefox".
Vitest cannot run multiple headed browsers at the same time. Select a single project
to run or cancel and run tests with "headless: true" option. Note that you can also
start tests with --browser=name or --project=name flag. › - Use arrow-keys. Return to submit.
❯ chromium
firefox
CI 환경에서 여러 헤드리스 모드가 아닌 프로젝트가 있는 경우 (즉, headless: false
가 구성에서 수동으로 설정되었고 CI 환경에서 재정의되지 않은 경우), Vitest는 실행에 실패하고 어떤 테스트도 시작하지 않습니다.
헤드리스 모드에서 테스트를 실행하는 기능은 이와 무관합니다. headless: false
로 설정되지 않은 한 모든 인스턴스를 병렬로 실행할 수 있습니다.