A Capacitor release can pass its end-to-end checks and still ship a broken invoice calculation, stale feature flag, or platform-specific branch. The failure often starts earlier: a unit test still reflects the old behavior, a mock hides a changed dependency, or CI runs a different environment from the developer’s machine. By the time the bug reaches a phone or Electron desktop build, the test suite has provided confidence without providing protection.
그것이 왜 Jest 단위 테스트 실행 명령어로만 보지 말고, 살아있는 워크플로우의 결정으로 다루세요. 유용한 질문은 실제적인 것들입니다: 개발자가 실패를 신뢰할 수 있는 속도, 어떤 경계가 격리되어야 하는지, CI에서 어떤 커버리지가 속해야 하는지, Jest가 프로젝트의 모듈 시스템과 피드백 기대와 일치하는지 여부를 묻는 것입니다. 이 가이드는 Node 서비스, 웹 애플리케이션, Capacitor 프로젝트, Electron 앱에 걸쳐서 이러한 결정들을 다룹니다. 더 광범위한 배포 맥락에서 자동화된 체크가 어디에 들어가야 하는지에 대한 정보는 자동화된 테스트에서 현대적인 소프트웨어 워크플로우를 참조하세요. 자동화된 테스트에서 현대적인 소프트웨어 워크플로우.

목차
- 2026년 Jest 단위 테스트가 여전히 중요합니다
- Jest를 다양한 환경에서 설치하고 설정하는 방법
- 첫 번째 신뢰할 수 있는 단위 테스트를 작성하세요
- 실제로 확장 가능한 모킹 전략
- Jest와 CI 및 Coverage Gates를 통합
- 대규모에서 신뢰할 수 있는 Jest 단위 테스트 유지
- 팀의 결정 프레임워크 및 다음 단계
2026년 Jest 단위 테스트의 중요성
Jest는 단순히 진술 문법을 해결하는 것보다 더 많은 것을 해결한다. 팀에게 반복 가능한 비즈니스 논리 검증 장소, 의존성 경계 제어, 커버리지 기대치를 강제하는 장소, 그리고 사용자에게 도달하기 전에 모바일 또는 데스크톱 패키지를 실행하기 전에 체크를 실행하는 장소가 있다. 이 워크플로가 중요할 때 JavaScript 동작이 브라우저 셸, Capacitor WebView, Electron 렌더러, 그리고 플랫폼 API 주변에 다르게 실행되는 Node 프로세스에서 동일하게 실행된다.
Jest의 채택도 역사적인 무게를 가지고 있다. Facebook은 JavaScript 채팅 재작성용으로 2011 를 만들었고 2014에서 오픈 소스화했다. OpenJS 재단은 그것이 38,000 GitHub 개별별점과 2022년 17만 명의 주간 다운로드, 그 수가 더 많아지면서 43,000 개별별점과 2024년 21만 명의 주간 다운로드 (OpenJS Foundation의 Jest 프로젝트 역사). 그 숫자들은 모든 새로운 저장소에 Jest가 적합한지 증명하지는 않지만, 팀들이 종종 상속하는 mature한 생태계, familiar한 convention, 그리고 큰 pool의 existing 예시를 설명한다.
단위 테스트를 생략하고 E2E 테스트만 사용하는 것은 초기에 비용이 적게 들 수 있지만, 작은 실패가 전체 애플리케이션 실행, 장치 설정, 네트워크 경로, 플랫폼 특정 진단을 필요로 할 때 비용이 많이 들 수 있다. E2E 테스트는 중요한 출시 여정에 유용하지만, 빠른, 집중된 계산, 업데이트 매니페스트, 권한 결정, 저장소 어댑터, 오류 매핑과 같은 tax 계산과 같은 빠른 검사에 적합하지 않다.
실용적인 규칙: Jest를 유지할 때 생태계가 이주 위험이 줄어들고, 개발자에게 신뢰할 수 있는 feedback를 제공하는 테스트 스위트를 유지한다. runner 자체가 일일 bottleneck가 된 경우 다른 runner를 고려한다.
이 안내서의 나머지 부분은 그 workflow를 따릅니다. 환경을跨하는 Jest를 구성하고, behavior-focused 테스트를 작성하고, 유지 관리할 수 있는 mocks를 선택하고, CI와 coverage에 연결하고, scale에서 flakiness를 줄이고, 의도적으로 keep-or-switch 결정을 내립니다.
환경을跨하는 Jest 설치 및 구성
Node 서비스의 경우, 일반적으로 Jest의 기본 환경과 테스트 스크립트가 필요합니다. 브라우저에 접근하는 Capacitor 또는 Electron 모듈은 DOM-like 글로벌 변수가 필요하며, TypeScript는 디버깅, 모듈 호환성 및 시작 동작에 영향을 미치는 변환 결정이 필요합니다.
플레인 Node 프로젝트의 경우, 패키지를 초기화하고 Jest를 개발 의존성으로 설치하세요:
npm init -y
npm install --save-dev jest
npx jest --init
생성된 구성은 시작점이 아닌 디자인 결론입니다. 테스트 환경, 변환, 모듈 별칭 및 설정 파일을 검토한 후에 커밋하세요.
TypeScript 변환을 의도적으로 선택하세요
ts-jest 이 옵션은 이미 TypeScript 컴파일러 동작에 의존하는 저장소가 있는 경우 개발자들이 익숙한 디아그노스틱을 원할 때 편리합니다. @swc/jest 변환 속도가 중요하고 타입 체크가 별도의 명령으로 실행되는 경우 transpilation 속도가 빠른 옵션이 유용합니다. 이 옵션은 타입 체커를 대체하지 않으며 ESM-heavy 패키지는 변환기와 상관없이 추가 구성이 필요할 수 있습니다.
| 옵션 | Node | TypeScript | Capacitor/Electron |
|---|---|---|---|
| 환경 | node |
node 프로젝트에 맞게 |
jsdom DOM-facing code |
| 변환 | 일반적으로 없음 | ts-jest 또는 @swc/jest |
TypeScript 변환 및 DOM 설정 |
| ESM 처리 | 패키지 형식 일치 | 변환기 지원 확인 | 플러그인 의존성 및 모듈 별칭 확인 |
| 일반적인 설정 | 최소 | jest.config.ts |
setupFilesAfterEnv, 모의, 브라우저 API |
A TypeScript configuration using ts-jest A TypeScript configuration using
import type { Config } from 'jest'
const config: Config = {
preset: 'ts-jest',
testEnvironment: 'node',
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
clearMocks: true,
collectCoverageFrom: ['src/**/*.{ts,tsx}'],
}
export default config
JavaScript 또는 혼합 저장소의 Babel 기반 설정을 유지하세요:
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript',
],
}
Add only the browser shims your code needs
Capacitor live-update alternatives comparison page에서만 사용하는 Capacitor와 Electron 테스트는 자주 code을 임포트합니다. code은 Capacitor이 기대하는 것을 window.matchMedia 또는 IntersectionObserverCapacitor live-update alternatives comparison page에서만 사용하는 __CAPGO_KEEP_0__와 Electron 테스트는 자주 __CAPGO_KEEP_1__을 임포트합니다. __CAPGO_KEEP_1__은 __CAPGO_KEEP_0__이 기대하는 것을
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: (query: string) => ({
matches: false,
media: query,
onchange: null,
addListener: () => {},
removeListener: () => {},
addEventListener: () => {},
removeEventListener: () => {},
dispatchEvent: () => false,
}),
})
class MockIntersectionObserver {
observe() {}
unobserve() {}
disconnect() {}
}
Object.defineProperty(window, 'IntersectionObserver', {
writable: true,
value: MockIntersectionObserver,
})
Capacitor live-update alternatives comparison page에서만 사용하는 __CAPGO_KEEP_0__와 Electron 테스트는 자주 __CAPGO_KEEP_1__을 임포트합니다. __CAPGO_KEEP_1__은 __CAPGO_KEEP_0__이 기대하는 것을 transformIgnorePatterns Capacitor live-update alternatives comparison page에서만 사용하는 Capacitor와 Electron 테스트는 자주 __CAPGO_KEEP_1__을 임포트합니다. __CAPGO_KEEP_1__은 Capacitor이 기대하는 것을Capacitor live-update alternatives comparison page에서만 사용하는 __CAPGO_KEEP_0__와 Electron 테스트는 자주 __CAPGO_KEEP_1__을 임포트합니다. __CAPGO_KEEP_1__은 __CAPGO_KEEP_0__이 기대하는 것을Capacitor live-update alternatives comparison page에서만 사용하는 __CAPGO_KEEP_0__와 Electron 테스트는 자주 __CAPGO_KEEP_1__을 임포트합니다. __CAPGO_KEEP_1__은 __CAPGO_KEEP_0__이 기대하는 것을 experimentalVMModules Capacitor live-update alternatives comparison page에서만 사용하는 __CAPGO_KEEP_0__와 Electron 테스트는 자주 __CAPGO_KEEP_1__을 임포트합니다. __CAPGO_KEEP_1__은 __CAPGO_KEEP_0__이 기대하는 것을
자바스크립트에 초점을 맞춘 설정.walkthrough를 위해 사용하세요. Capgo의 자바스크립트 단위 테스트 가이드를 사용하세요.. 실제 확인 명령어로 설치를 마치세요:
npx jest --runInBand
흡기 테스트가 통과하면 Jest가 프로젝트를 로드할 수 있음을 확인합니다. 그러나 프로덕션 및 테스트 모듈 그래프가 동일하게 동작하는지 확인하지는 않습니다. 따라서 ESM, DOM 및 플러그인 임포트 테스트를 작성하여 중요 경로에서 테스트하세요.
첫 번째 신뢰할 수 있는 단위 테스트 작성하기
관찰 가능한 동작을 설명하는 유용한 단위 테스트는 제어된 환경에서 작동합니다. 준비, 실행, 확인 패턴은 의도된 의도를 유지합니다: 입력 및 의존성을 준비하고, 공개 함수를 호출하고, 결과 또는 외부적으로 가시적인 효과를 확인합니다.
예를 들어, 인보이스 모듈이 이 함수를 내보내는 경우:
export function calculateInvoiceTotal(
subtotal: number,
taxRate: number,
discountRate: number,
): number {
const discounted = subtotal * (1 - discountRate)
return Math.round(discounted * (1 + taxRate) * 100) / 100
}
테스트는 금융 동작에 집중해야 하며, 지역 변수로 명명된 discounted:
import { calculateInvoiceTotal } from './calculateInvoiceTotal'
describe('calculateInvoiceTotal', () => {
it('applies percentage discount before tax', () => {
const subtotal = 100
const taxRate = 0.2
const discountRate = 0.1
const total = calculateInvoiceTotal(subtotal, taxRate, discountRate)
expect(total).toBe(108)
})
it('rounds the final amount to currency precision', () => {
const total = calculateInvoiceTotal(19.99, 0.2, 0)
expect(total).toBe(23.99)
})
})
각 it 이름은 하나의 동작을 나타냅니다. 후속 리팩터링이 내부 계산을 변경하지만 계약을 보존한다면 이 테스트는 여전히 유용해야 합니다.

비동기 테스트도 동일한 discipline이 필요합니다. Jest의 resolves 그리고 rejects 기대하는 약속 결과를 명확하게 표현하십시오:
it('returns an invoice from the API', async () => {
await expect(fetchInvoice('invoice-123')).resolves.toMatchObject({
id: 'invoice-123',
})
})
it('rejects when the invoice is missing', async () => {
await expect(fetchInvoice('missing')).rejects.toThrow('Invoice not found')
})
위험한 실수는 반환되지 않은 기대치를 만드는 것입니다. Jest에 초점을 맞춘 지침은 잊혀진 await 또는 return false positive를 유발하는 statement을 원인으로 삼고 테스트를 통과시키는 테스트를 경고 없이 통과시킨다.Jest 단위 테스트 관행테스트가 실패 경로를 확인하지 않고 assertion에 기다리지 않는 테스트는 실패 경로를 확인하지 않았습니다.
부실한 신뢰감을 생산하는 세 가지 습관을 피하십시오:
- private helper를 테스트하십시오: helper가 의미 있는 공공 경계를 나타내지 않는 경우에만 노출된 동작을 테스트하십시오.
- 내부 상태를 확인하는 방법: 반환된 값, 발생한 이벤트, 저장된 레코드 또는 표시된 출력을 선호합니다.
- 콜 어설션을 과도하게 사용하는 경우:
toHaveBeenCalled()단독으로는 거의 NOTHING을 의미합니다. 관련된 인자와 결과적인 동작을 확인하세요.
PR 체크리스트는 짧게 유지할 수 있습니다:
- 각 테스트가 하나의 동작을 커버하는지 확인하세요.
- 테스트가 Arrange, Act, Assert 순서를 따르는지 확인하세요.
- 비동기적인 기대치를 기다리는지 확인하세요.
- 의존성을 명확한 경계에서만 모킹하는지 확인하세요.
- 테스트가 내부 리팩토링을 견딜 수 있는지 확인하세요.
컴포넌트에 특정한 예시의 경우 Capgo의 React 단위 테스트 가이드 Mocking Strategies That Actually Scale
Mocking becomes difficult when a suite grows because every shortcut creates a maintenance obligation. A hand-written
can be exactly right for a callback. A module replacement can isolate an __CAPGO_KEEP_0__. A network interceptor can preserve more of the application’s real request behavior. The choice should follow the seam you’re testing. jest.fn() Consider a payment validator that calls a Stripe SDK, records an audit event, and reaches an HTTP risk service. A focused unit test might spy on the logger, replace the payment __CAPGO_KEEP_1__, and intercept the risk request. Each technique controls a different boundary.
Consider a payment validator that calls a Stripe SDK, records an audit event, and reaches an HTTP risk service. A focused unit test might spy on the logger, replace the payment SDK, and intercept the risk request. Each technique controls a different boundary.
| Setup cost | Fidelity | Maintenance burden | Best fit | or |
|---|---|---|---|---|
jest.fn() or jest.spyOn() |
Low | 집중 | 지역에서 낮음 | 콜백, 로거, 주입 서비스 |
jest.mock() |
중간 | 낮음에서 중간 | 빠르게 성장할 수 있음 | 비용이 많이 드는 사이드 이펙트를 가진 SDK, 모듈 |
| MSW | HTTP 경계에서 높음 | 중앙 집중식 | 요청 동작, 오류, 응답 계약 | __CAPGO_KEEP_0__ |
수동 스파이 (local decisions)
존재하는 의존성을 주입하고 테스트에서 관찰하거나 제어해야 하는 한 번의 상호 작용을 관찰할 때 스파이를 사용하세요:
const audit = {
record: jest.fn(),
}
const result = await validatePayment(input, {
paymentClient,
audit,
})
expect(audit.record).toHaveBeenCalledWith(
expect.objectContaining({ event: 'payment.validated' }),
)
expect(result.status).toBe('approved')
테스트 케이스 사이에 상태를 초기화하세요. 공유 상태는 Jest 실패의 흔한 원인이며, 권장하는 방법은 호출 횟수와 상태 누출을 방지하기 위해 mock을 초기화하는 것입니다 ( beforeEach Jest 단위 테스트 마스터중량급 SDK의 모듈 스파이).
Stripe 또는 네이티브 플러그인 모듈은 로드되면 즉시 설정을 수행합니다. 프로덕션 구현을 로드할 때 자격 증명, 네이티브 바인딩, 또는 무의미한 동작을 포함시키지 않도록 해당 모듈을 대체하세요:
애플리케이션에서 반환된 값에 대한 테스트가 여전히 성공해야 합니다. 의미 있는 결과가 없는 __CAPGO_KEEP_0__ 호출 확인은 오직 mock이 구성된 것을 증명할 뿐입니다.
jest.mock('stripe', () => ({
payments: {
authorize: jest.fn(),
},
}))
The test should still assert the value returned by the application. A passing SDK call assertion without a meaningful result can prove only that the mock was configured.
__CAPGO_KEEP_0__가 요청 생성, 응답 파싱, 재시도, 또는 오류 변환을 소유하고 있는 경우, MSW는 HTTP layer를 가로채면서 요청 경로를 보존할 수 있습니다:
For code that owns request construction, response parsing, retries, or error translation, MSW can intercept the HTTP layer while preserving the request path:
server.use(
http.post('/risk/check', async () => {
return HttpResponse.json({ decision: 'review' })
}),
)
이것은 일반적으로 매 테스트마다 낮은 수준의 호출을 모킹하는 것보다 더 높은 신뢰도를 제공합니다. 또한 Node 및 브라우저 환경에서 응답 시나리오를 더 쉽게 이름付け하고 재사용할 수 있습니다. fetch 이것은 일반적으로 매 테스트마다 낮은 수준의 호출을 모킹하는 것보다 더 높은 신뢰도를 제공합니다. 또한 Node 및 브라우저 환경에서 응답 시나리오를 더 쉽게 이름付け하고 재사용할 수 있습니다.
Mock을 구멍에 넣지 말고 구멍 자체에 넣지 말라.
Mock이 너무 많으면 테스트가 통과하는 동안 통합 연결이 깨진다. Mock이 너무 적으면 실제 네트워크, 파일 시스템, 시계, 또는 데이터베이스가 유닛 테스트에 들어가서 느리고 불확실한 스위트를 만든다. 순수 논리를 모든 I/O에서 자유롭게하고 경계 검증을 계약 또는 통합 테스트로 옮겨서 인터페이스가 중요할 때 경계를 검증하라.
Jest와 CI, Coverage Gates 통합하기
CI는 두 가지 다른 질문에 답해야 한다. 첫 번째로, 빠른 유닛 스위트는 안전하지 않은 변경을 거부하는가? 두 번째로, 느린 통합 검증은 중요한 경계가 여전히 작동하는지 확인하는가? 모든 테스트를 하나의 비분명한 명령으로 넣으면 feedback가 더 어려워지고 개발자가 테스트를 무시하게 된다.
GitHub Actions 워크플로우는 Node 런타임을 고정하고 의존성 캐싱을 위해 lockfile를 사용하며 Jest의 CI 모드에서 유닛 체크를 실행할 수 있다.
name: test
on:
pull_request:
push:
jobs:
unit:
runs-on: ubuntu-latest
strategy:
matrix:
node: [20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: npm
cache-dependency-path: package-lock.json
- run: npm ci
- run: npm run test:unit, --ci --coverage
- uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.node }}
path: coverage/
패키지 스크립트는 빠른 테스트와 통합 작업을 분리할 수 있다.
{
"scripts": {
"test:unit": "jest --runInBand tests/unit",
"test:integration": "jest --runInBand tests/integration"
}
}
위치된 값은 예시로, 실제 표준은 검증되지 않았다. 실제 바닥을 저장소의 현재 기준선에서 설정하고 팀이 의미 있는 커버리지를 추가할 때 높여라. 엄격한 게이트는 생성된 또는 낮은 위험의 __CAPGO_KEEP_0__를 측정하는 경우에 급히 고쳐야 하는 것을 막을 수 있다. 느슨한 게이트는 중요한 경로가 무시된 채로 쌓일 수 있다.
module.exports = {
collectCoverageFrom: ['src/**/*.{js,ts,tsx}'],
coverageThreshold: {
global: {
branches: 70,
functions: 80,
lines: 80,
statements: 80
}
}
}
https://docs.code.com/assets/images/help/repository/actions-illustration.png

대형 저장소에서 사용하는 경우, 테스트 격리 상태가 안정적일 때까지 매트릭스 기반 샤딩만 사용하십시오. 각 샤드는 자신의 보고서에 명확한 소유권을 가지고 있어야 하며, 최종 상태는 Pull Request에서 실패를 표시하는 대신 로그에 묻지 않도록 해야 합니다. 팀은 또한 HTML Coverage를 Artifact로 업로드하고 Codecov 또는 Coveralls에 데이터를 공유할 수 있습니다. 단, 서비스가 보고서를 올바르게 병합할 수 있도록 구성되어야 합니다. lcov Codecov 또는 Coveralls로 데이터를 업로드하려면 서비스가 보고서를 올바르게 병합할 수 있도록 구성되어야 합니다.
읽기 CI 운영 규칙 alongside your workflow design, especially if multiple applications share one repository. Capgo’s __CAPGO_KEEP_0__의 CI/CD 통합 테스트 지침은 모바일 빌드 및 릴리즈 자동화와 테스트 상태를 연결해야 하는 경우 유용합니다. 대규모 Jest 테스트를 신뢰할 수 있는 방법
대규모 Jest 테스트가 일관되게 통과하는 경우에도 잘못된 것을 테스트하고 있는 경우 신뢰가 떨어집니다. 테스트가 구현 세부 사항에 의존하거나 스냅샷이 유용한 검토 범위 이상으로 커지거나 공유된 모킹이 테스트가 구성한 것과 멀리 떨어진 행동을 변경하는 경우입니다.
스냅샷은 의도적인 소유권이 필요합니다. 구조가 실제 계약인 경우, 예를 들어 안정적인 컴포넌트 또는 직렬화된 메시지의 경우 잘 작동합니다. 개발자가 출력을 검토하지 않고 광범위한 업데이트를 승인하는 경우 노이즈를 생성합니다. 의도적으로 다시 생성하고 diff를 검토한 후 의미 있는 동작을 보호하는 파일을 제거하십시오.
Layer를 사용하여 Jest가 모든 것을 소유하지 않도록 하십시오.
테스트 Layer에 좁은 작업을 부여하십시오.
__CAPGO_KEEP_0__는 CI/CD 통합 테스트 지침을 제공합니다.
- 순수 단위 테스트: 네트워크 또는 파일 시스템 접근이 없는 상태에서 결정론적 계산, 파서, 리듀서, 정책 결정 및 오류 매핑을 검증합니다.
- 계약 테스트: 모듈 경계, 어댑터 형태, 요청 페이로드 및 플러그인 대면 동작을 확인합니다.
- 얇은 E2E 커버리지: 실제 사용자 여행을 Capacitor 또는 Electron 셸에서 작은 세트로 실행합니다.
이 구성은 단위 테스트를 빠르게 유지하면서 mocks가 생산성을 대표하지 못하는 경계를 확인합니다. 또한 일반적인 모바일 실패 모드를 피하기 위해 비용이 많이 드는 UI 경로를 통해 전체 네이티브 업데이트 또는 권한 흐름을 테스트하는 대신 JavaScript 결정 논리를 분리하는 것이 좋습니다.
한 가지 동작을 유지하십시오. it() 실패가 진단할 수 있는 경우에만 호출 순서를 확인하십시오. 저장된 레코드를 노출하는 메서드를 가진 인 메모리 저장소와 같은 쿼리 가능한 가짜는 hardcoded 반환 값을 단순히 현재 implementation을 복사하는 것보다 더 나은 feedback를 제공합니다.
통과 테스트는 사용자 또는 이웃 모듈이 오늘날의 code이 어떻게 구성되어 있는지에 대해 의존할 수 있는 것을 설명해야 합니다.
반복적인 테스트 건강 검진을 예약하십시오. 불안정한 테스트, 폐지된 스냅샷, 불필요한 설정 및 mocks가 더 이상 생산 동작과 일치하지 않는 경우를 검토하십시오. 낮은 가치의 테스트를 삭제하는 것이 이미 너무 많은 것을 숨기는 테스트에 추가하는 또 다른 확인을 추가하는 것보다 안전합니다.
CI dash보드에서 불안정성 추적. 테스트가 실패하는 경우 code 변경이 없다면, 실패 증거를 보존하고 공유 상태를 분리하고 시간과 난수를 제어하고, 실행자 오버로드 시 워커 압력을 줄입니다. CI 머신에서 측정치를 기반으로 워커 한도 설정을 하십시오. 추가 병렬성은 경쟁을 증가시키고 스위트가 느려질 수 있기 때문입니다. 워커 설정은 실행자 구성과 함께 문서화하여 미래의 변경이 의도된 것임을 유지하십시오.
팀의 결정 프레임워크 및 다음 단계
Jest는 이미 안정적인 스위트,established transforms 및 mocks, 그리고 팀이 실험적인 실행자보다 마이그레이션 안전성을 중요시하는 경우 안정적인 기본값입니다. 새로운 프로젝트가 ESM-first, 원본 피드백이 우선순위인 경우 또는 watch-mode 재실행이 개발을 중단하는 경우 대안을 비교하십시오. Benchmarks 결과는 레포지토리 아키텍처 및 트랜스포머 작업에 따라 크게 달라질 수 있으므로, 비교 결과를 방향성만으로 간주하십시오.
4가지 기준을 사용하십시오:
- 기존 도구: Jest를 유지할 때, 구성, 테스트 유틸리티 및 CI 규칙이 이미 작동하는 경우.
- 모듈 형식: ESM-만 의존성이 반복적으로 예외나 커스텀 워크아라운드가 필요할 때 실행자를 다시 고려하십시오.
- 피드백 기대: 실제 레포지토리에서 대표적인 watch 변경을 측정하십시오. 빈 데모 프로젝트에서 측정하지 마십시오.
- 팀 능력: 팀이 구성하고 디버그할 수 있는 익숙한 실행자가 더 좋은 결과를 내는 경우가 있습니다. 더 빠른 도구를 잘못 사용하는 경우.
Vitest, Node의 내장 테스트 러너 및 Playwright는 서로 다른 요구 사항을 충족한다. Playwright는 주로 브라우저 E2E 커버리지에 속한다. Node의 러너는 집중된 Node 서비스에 적합하다. Vitest는 일반적으로 초안 ESM 및 Vite-oriented 프로젝트에 적합하다. Jest는 성숙한 모의, 변환 및 기존 CI 규칙에 의존하는 팀에 적합하다. 신뢰할 수 있는 경계를 유지하면서 feedback가 사용할 수 있는지 선택하세요.
실용적인 90일 리셋
1월, 스위트를 감사하세요. 유지보수 담당자를 지정하여 불안정한 테스트, 죽은 스냅샷, 구현 결합된 진술, 실제 I/O를 수행하는 테스트를 카탈로그화하세요. 결과는 삭제, 수리 및 통합 커버리지가 필요한 경계를 기록한 서면 목록이여야 합니다.
2월, 디자인을 표준화하세요. 공유 테스트 유틸리티를 추가하고 모킹 규칙을 문서화하고 중요한 패키지에 대한 커버리지 보고를 도입하세요. 게이트가 있는 패키지와 아직 집중 테스트가 부족한 동작을 기록하여 기준선이 검토 가능한지 확인하세요.
3월, 배달을 안정화하세요. CI 워커를 조정하고 단위 및 통합 작업을 분리하고 위험 기반 커버리지 바닥을 설정하고 규칙을 문서화하여 살아있는 TESTING.mdpipeline은 작동 가능한 실패를 보고하며 새로운 테스트는 동일한 경계와 모킹 규칙을 따르야 합니다.
테스트 스위트를 반복 일정에 따라 검토하십시오. 더 이상 사용되지 않는 프로덕션 동작과 일치하지 않는 mocks, 불필요한 설정, 그리고 오래된 스냅샷을 제거하십시오. 낮은 가치의 테스트는 다른 어설션으로 강화하는 것보다 삭제하는 것이 더 안전할 수 있습니다. CI에서 불안정한 실패를 추적하고 증거를 보존하십시오. 공유 상태를 분리하고 시간과 난수를 제어하고, 경쟁이 나타날 때 워커의 압력을 줄이십시오. CI 머신에서 측정치를 기반으로 워커 한도 설정하고, 러너 구성과 함께 문서화하십시오.
이러한 관행은 더 광범위한 소프트웨어 개발 최적화 방법. 자바스크립트修정에 대한 테스트를 위해 Capacitor 또는 Electron 사용자를 위한 Capgo는 특정 채널을 통해 서명된 자바스크립트, CSS, 구성 및 자산 번들을 제공할 수 있습니다. 또한 롤백 보호 및 릴리스 관찰성을 제공하며, 웹 레이어 수정에 대한 매번의 앱 스토어 리뷰가 필요하지 않습니다.
If your team ships Capacitor or Electron applications, visit Capgo 라이브 자바스크립트 업데이트가 제어 채널, 스테이지드 롤아웃 및 롤백 보호에 어떻게 적합한지 평가하기 위해 시작합니다. Jest 경계와 CI 게이트를 문서화한 다음, 즉시 배포가 필요한 수정에 대한 복구 경로에서 Capgo이 어디에 위치하는지 정의합니다.