워크스페이스
Vitest는 워크스페이스 설정 파일을 통해 모노레포를 기본적으로 지원합니다. 워크스페이스를 생성하여 프로젝트별 설정을 정의할 수 있습니다.
워크스페이스 정의
워크스페이스는 루트 디렉터리에 vitest.workspace
또는 vitest.projects
파일을 포함해야 합니다. (구성 파일이 있다면 해당 파일과 같은 폴더에 위치해야 합니다.) Vitest는 이 파일에 대해 ts
, js
, json
확장자를 지원합니다.
워크스페이스 설정 파일은 프로젝트를 참조하는 파일 목록 또는 glob 패턴을 기본적으로 export해야 합니다. 예를 들어 packages
라는 프로젝트 폴더가 있는 경우, 다음 설정 파일로 워크스페이스를 정의할 수 있습니다.
export default ['packages/*'];
Vitest는 packages
내의 모든 폴더를, 구성 파일이 없더라도 별도의 프로젝트로 취급합니다.
WARNING
Vitest는 루트 설정을 워크스페이스 프로젝트로 간주하지 않습니다. 따라서 이 설정에 지정되지 않은 경우 include
에 지정된 테스트는 실행되지 않습니다.
프로젝트의 설정 파일을 직접 참조할 수도 있습니다.
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
이 패턴은 파일 확장자 앞에 e2e
또는 unit
이 포함된 vitest.config
파일을 가진 프로젝트만 포함합니다.
WARNING
glob 패턴으로 파일 이름을 참조하는 경우, 구성 파일 이름이 vite.config
또는 vitest.config
로 시작하는지 확인하십시오. 그렇지 않으면 Vitest는 해당 파일을 무시합니다.
인라인 설정을 사용하여 프로젝트를 정의하는 것도 가능합니다. 워크스페이스 파일은 두 가지 구문을 동시에 사용할 수 있도록 지원합니다.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace는 편리한 타입 힌트 기능을 제공합니다.
export default defineWorkspace([
'packages/*',
{
// 두 설정을 함께 병합하려면 "extends"를 사용하십시오.
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// 인라인 설정을 사용할 때는 이름을 지정하는 것이 좋습니다.
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
environment: 'node',
},
},
]);
WARNING
모든 프로젝트는 고유한 이름을 가져야 합니다. 그렇지 않으면 Vitest에서 오류가 발생합니다. 인라인 설정 내부에 이름을 제공하지 않으면 Vitest가 자동으로 숫자를 할당합니다. glob 패턴으로 정의된 프로젝트 설정에서 이름을 지정하지 않으면 Vitest는 기본적으로 디렉터리 이름을 사용합니다.
인라인 설정에 의존하지 않는 경우, 루트 디렉터리에 간단한 json 파일을 만들 수 있습니다.
["packages/*"]
워크스페이스 프로젝트는 모든 설정 옵션을 지원하지 않습니다. 타입 안전성을 높이기 위해 프로젝트 구성 파일에서는 defineConfig
메서드 대신 defineProject
를 사용하십시오.
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters"는 프로젝트 설정에서 지원되지 않으므로
// 오류가 발생합니다.
reporters: ['json'],
},
});
구성
설정 옵션은 루트 수준 구성 파일에서 상속되지 않습니다. 공유 설정 파일을 만들고 프로젝트 설정과 직접 병합해야 합니다.
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
또한 일부 설정 옵션은 프로젝트 설정에서 허용되지 않습니다. 특히 다음 사항에 유의하십시오.
coverage
: 커버리지는 전체 워크스페이스 범위에서 실행됩니다.reporters
: 루트 수준의 리포터만 지원됩니다.resolveSnapshotPath
: 루트 수준의 리졸버만 사용됩니다.- 테스트 러너에 영향을 미치지 않는 다른 모든 설정
TIP
프로젝트 설정에서 지원되지 않는 모든 설정 옵션에는 "Config" 페이지에 * 기호가 표시됩니다.
커버리지
워크스페이스 프로젝트에 대한 커버리지는 기본적으로 작동합니다. 그러나 all
옵션을 활성화하고 일부 프로젝트에서 비표준 확장자를 사용하는 경우, 루트 구성 파일에 해당 확장자를 처리하는 플러그인이 있어야 합니다.
예를 들어 Vue 파일을 사용하는 패키지가 있고 자체 설정 파일이 있다고 가정해 봅시다. 만약 일부 파일이 테스트에서 import되지 않았다면, 커버리지는 프로젝트 설정이 아닌 루트 설정을 기준으로 분석을 시도하기 때문에 실패할 수 있습니다. 이는 사용되지 않은 파일의 사용량을 분석하는 과정에서 발생합니다.