# Vue Test Utils

λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ(Vue Test Utils (opens new window))은 μ½”μ–΄ νŒ€ 멀버가 μ œμž‘ν•œ ν…ŒμŠ€νŒ… 보쑰 λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. 제슀트(Jest) 뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ ν…ŒμŠ€νŠΈ 도ꡬ도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# μ΅œμ‹  Vue-CLI (3.x 버전 이상)μ—μ„œ μ„€μΉ˜ 방법

μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈμ˜ 경우 κΈ°λ³Έ ν™˜κ²½μ΄ μ„€μ •λœ κΈ°λ³Έ 프리셋(Default)을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έμ„ μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ μ•„λž˜μ™€Β κ°™μ΄ ManuallyΒ selectΒ features μ˜΅μ…˜μ„Β μ„ νƒν•΄μ€λ‹ˆλ‹€.

λ²„μ „λ³„Β ν”„λ¦¬μ…‹Β λ˜λŠ”Β μˆ˜λ™Β μ„€μ •Β μ„ νƒ

λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έμ„ μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ Unit Testing μ˜΅μ…˜μ„ μ„ νƒν•΄μ€λ‹ˆλ‹€.

λ·° CLIμ—μ„œ ν…ŒμŠ€νŠΈ 도ꡬ μ˜΅μ…˜ 선택

TIP

λ°©ν–₯ν‚€(↑, ↓)둜 ν•­λͺ©μ„ 이동할 수 있고 space ν‚€λ‘œ 선택/ν•΄μ œ, enter ν‚€λ‘œ κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# Vue CLI μ˜΅μ…˜ 선택

Unit Testing μ˜΅μ…˜μ„ μΆ”κ°€ν•˜κ³  λ‚˜λ©΄ μ•„λž˜μ™€ 같이 μ°¨λ‘€λŒ€λ‘œ μ„ νƒν•©λ‹ˆλ‹€.

  1. λ¨Όμ € μ½”λ“œ 정리 도ꡬ인 Prettier와 문법 검사 도ꡬ인 ESLintλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

문법 검사 보쑰 도ꡬ와 μ½”λ“œ 정리 도ꡬ 선택

  1. λ‹€μŒμ€ 문법 검사 λ„κ΅¬μ˜ μ‹€ν–‰ μ‹œμ μ„ μ„ νƒν•©λ‹ˆλ‹€. μ—λ””ν„°μ—μ„œ μ €μž₯을 λˆ„λ₯Ό λ•Œλ§ˆλ‹€ κ²€μ‚¬ν•˜λŠ” κ²ƒμœΌλ‘œ μ„ νƒν•©λ‹ˆλ‹€.

문법 검사 보쑰 도ꡬ와 정리 도ꡬ 선택

  1. λ‹¨μœ„ ν…ŒμŠ€νŠΈ λ„κ΅¬λŠ” 제슀트둜 μ„ νƒν•©λ‹ˆλ‹€.

문법 검사 보쑰 도ꡬ와 정리 도ꡬ 선택

  1. μœ„μ—μ„œ μΆ”κ°€ν•œ ESLint와 ν”„λ¦¬ν‹°μ–΄μ˜ μ„€μ • λ‚΄μš©μ„ package.json에 μΆ”κ°€ν•˜μ§€ μ•Šκ³  κ°œλ³„ μ„€μ • νŒŒμΌμ— κ΄€λ¦¬ν•©λ‹ˆλ‹€.

문법 검사 보쑰 도ꡬ와 정리 도ꡬ 선택

# κΈ°μ‘΄ Vue-CLI (2.x 버전 μ΄ν•˜)μ—μ„œ μ„€μΉ˜ 방법

μ•„λž˜μ˜ λͺ…λ Ήμ–΄λ‘œ λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ 라이브러리λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

npm install jest @vue/test-utils vue-jest babel-jest --save-dev

μœ„ λͺ…λ Ήμ–΄λ‘œ vue test util, jest, vue-jest, babel-jest 4개의 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ„€μΉ˜λ©λ‹ˆλ‹€.

# babel μ‚¬μš©ν•˜κΈ°

ν”„λ‘œμ νŠΈμ— 바벨(babel) (opens new window)을 μ„€μ •ν•œ 적이 μ—†λ‹€λ©΄ μ•„λž˜μ™€ 같이 μ„€μΉ˜ν•΄μ€λ‹ˆλ‹€.

npm install @babel/core @babel/preset-env babel-core@^7.0.0-bridge.0 --save-dev

바벨은 μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript) μ»΄νŒŒμΌλŸ¬λ‘œμ„œ μž‘μ„±ν•œ μ΅œμ‹  μ½”λ“œ(ECMAScript 2015 버전 이상)λ₯Ό 이전 버전(였래된 λΈŒλΌμš°μ € λ˜λŠ” ν™˜κ²½)에 ν˜Έν™˜ν•˜μ—¬ λ™μž‘ν•  수 μžˆλ„λ‘ μ½”λ“œλ₯Ό λ³€ν™˜ν•΄μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ•„λž˜ μ½”λ“œμ™€ 같이 ES2015+ 둜 μž‘μ„±λœ 문법을 이전 μžλ°”μŠ€ν¬λ¦½νŠΈ λ¬Έλ²•μœΌλ‘œ λ³€ν™˜ν•΄ μ€λ‹ˆλ‹€.

// 바벨 μž…λ ₯: ES2015 ν™”μ‚΄ν‘œ ν•¨μˆ˜
[1, 2, 3].map(n => n + 1);

// 바벨 좜λ ₯: λ³€ν™˜λœ μ½”λ“œ
[1, 2, 3].map(function(n) {
  return n + 1;
});

바벨 프리셋을 package.json λ˜λŠ” babel.config.json λ˜λŠ” babel.config.jsμ—μ„œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

// package.json
{
  // ...
  "babel": {
    "presets": ["@babel/preset-env"]
  }
}
// babel.config.json
{
  "presets": ["@babel/preset-env"]
}
// babel.config.js
module.exports = {
  presets: ["@babel/preset-env"] // μˆ˜λ™ μ„€μ •
  presets: ["@vue/cli-plugin-babel/preset"] // vue cli둜 μ„€μΉ˜ν•œ 경우 μžλ™ 섀정됨
};

μ œμŠ€νŠΈμ™€ κ΄€λ ¨λœ ν™˜κ²½ 섀정은 제슀트 ν™˜κ²½ μ„€μ • μ—μ„œ ν™•μΈν•΄λ³΄μ„Έμš”.

  • transform의 babel-jest

# μ›ΉνŒ©(Webpack) 별칭(Alias) μ‚¬μš©

// package.json
{
  "jest": {
    "moduleNameMapper": {
      // 별칭 @(ν”„λ‘œμ νŠΈ/src) μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 경둜의 νŒŒμΌμ„ λ§΅ν•‘ν•©λ‹ˆλ‹€
      "^@/(.*)$": "<rootDir>/src/$1"
    }
  }
}
// jest.config.js
module.exports = {
  moduleNameMapper: {
    // 별칭 @(ν”„λ‘œμ νŠΈ/src) μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 경둜의 νŒŒμΌμ„ λ§΅ν•‘ν•©λ‹ˆλ‹€
    '^@/(.*)$': '<rootDir>/src/$1'
  },
};

ν”„λ‘œμ νŠΈ 경둜/src κΉŒμ§€ 경둜λ₯Ό @ λ³„μΉ­μœΌλ‘œ λ§΅ν•‘ν•©λ‹ˆλ‹€.

// 'ν”„λ‘œμ νŠΈ 경둜/src/' ν•˜μœ„μ— μ‘΄μž¬ν•˜λŠ” νŒŒμΌμ„ μ•„λž˜μ™€ 같이 κ°„μ†Œν™”ν•˜μ—¬ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€
import HelloWorld from "@/components/HelloWorld.vue";

TIP

ν”„λ‘œμ νŠΈμ— μ›ΉνŒ©μ„ μ‚¬μš© 쀑이고 별칭을 μ‚¬μš©ν–ˆλ‹€λ©΄ 제슀트 ν™˜κ²½ μ„€μ • 에도 λ™μΌν•˜κ²Œ μΆ”κ°€ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€. μ›ΉνŒ©κ³Ό 상관없이 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μœ„ν•΄ 별칭을 μ‚¬μš©ν•˜λŠ” 방식도 일관성 μžˆλŠ” 경둜λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄μ„œ μ’‹μŠ΅λ‹ˆλ‹€.

# μ½”λ“œ 컀버리지(Code Coverage)

μ œμŠ€νŠΈλŠ” ν…ŒμŠ€νŠΈμ˜ 성곡, μ‹€νŒ¨ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 결과뿐만 μ•„λ‹ˆλΌ ν…ŒμŠ€νŠΈ 컀버리지λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œ λ³΄κ³ μ„œλ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜μ™€ 같이 제슀트 ν™˜κ²½ μ„€μ • 에 μ μš©ν•œ ν›„

// packages.json
{
  "jest": {
    "collectCoverage": true,
    "collectCoverageFrom": [
      "**/*.{js,vue}",
      "!**/node_modules/**"
    ]
  }
}
// jest.config.js
module.exports = {
  collectCoverage: true,
  collectCoverageFrom: [
    '**/*.{js,vue}',
    '!**/node_modules/**'
  ]
};

ν…ŒμŠ€νŠΈλ₯Ό 싀행해보면 터미널에 μ•„λž˜μ™€ 같이 ν‘œ ν˜•μ‹μœΌλ‘œ κ²°κ³Όλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.

 PASS  tests/unit/example.spec.js
  HelloWorld.vue
    √ renders props.msg when passed (14ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |        0 |        0 |        0 |        0 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        1.628s
Ran all test suites.
Done in 2.46s.

각 컀버리지 ν•­λͺ©μ˜ μ„€λͺ…

  • Stmts: μ΅œμ†Œ ν•œ 번 이상 μ‹€ν–‰λœ λͺ…λ Ήλ¬Έ(λ³€μˆ˜μ— κ°’ μ €μž₯, ν•¨μˆ˜ 호좜 λ“±) μ½”λ“œμ˜ λΉ„μœ¨
  • Branch: μ΅œμ†Œ ν•œ 번 이상 if, switch와 같은 λΆ„κΈ° 쑰건이 좩쑱된 λΉ„μœ¨
  • Funcs: μ΅œμ†Œ ν•œ 번 이상 호좜된 ν•¨μˆ˜μ˜ λΉ„μœ¨
  • Lines: μ΅œμ†Œ ν•œ 번 이상 μ‹€ν–‰λœ μ½”λ“œ 라인의 λΉ„μœ¨
  • Uncovered Line: μ½”λ“œ 컀버리지에 μΈ‘μ •λ˜μ§€ μ•Šμ€ μ½”λ“œ 라인 수

# 제슀트 ν™˜κ²½ μ„€μ •

package.json μ—μ„œ μ„€μ • ν•˜κ±°λ‚˜ jest.config.js μ—μ„œ μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# package.json μ„€μ •

μ„€μΉ˜ν•˜κ³  λ‚˜μ„œ package.json νŒŒμΌμ— μ•„λž˜μ˜ μ˜΅μ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

{
  // ...
  "jest": {
    // vue-cli ν…ŒμŠ€νŠΈ ν™˜κ²½ 섀정을 μ‚¬μš©ν•©λ‹ˆλ‹€
    // 주의! preset 지정 ν›„ μ•„λž˜μ™€ 같이 각각 λ‹€μ‹œ μ„€μ •ν•˜λŠ” 경우, μƒˆλ‘œ μ„€μ •ν•œ λ‚΄μš©μœΌλ‘œ μ μš©λ©λ‹ˆλ‹€
    "preset": "@vue/cli-plugin-unit-jest",
    "moduleFileExtensions": [
      "js",
      "json",
      // λͺ¨λ“  vue 파일(`*.vue`)을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ Jestμ—κ²Œ μ•Œλ €μ€λ‹ˆλ‹€
      "vue"
    ],
    "transform": {
      // `vue-jest`λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  vue 파일(`*.vue`)을 μ²˜λ¦¬ν•©λ‹ˆλ‹€
      ".*\\.(vue)$": "vue-jest",
      // `babel-jest`λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  js 파일(`*.js`)을 μ²˜λ¦¬ν•©λ‹ˆλ‹€
      ".*\\.(js)$": "babel-jest",
    },
    "moduleNameMapper": {
      // 별칭 @(ν”„λ‘œμ νŠΈ/src) μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 경둜의 νŒŒμΌμ„ λ§΅ν•‘ν•©λ‹ˆλ‹€
      "^@/(.*)$": "<rootDir>/src/$1"
    },
    "testMatch": [
      // __tests__ 경둜 ν•˜μœ„μ— μžˆλŠ” λͺ¨λ“  js/ts/jsx/tsx νŒŒμΌμ„ ν…ŒμŠ€νŠΈ λŒ€μƒμœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€
      "**/__tests__/**/*.[jt]s?(x)",
      // 파일 이름에 'xxx.spec' λ˜λŠ” 'xxx.test'λΌλŠ” 이름이 뢙여인 λͺ¨λ“  js/ts/jsx/tsx νŒŒμΌμ„ ν…ŒμŠ€νŠΈ λŒ€μƒμœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€
      "**/?(*.)+(spec|test).[jt]s?(x)"
    ],
    // node_modules 경둜 ν•˜μœ„μ— μžˆλŠ” λͺ¨λ“  ν…ŒμŠ€νŠΈ νŒŒμΌμ„ λŒ€μƒμ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€
    "testPathIgnorePatterns": ["/node_modules/"],
    "collectCoverage": true,
    "collectCoverageFrom": [
      "**/*.{js,vue}",
      "!**/node_modules/**"
    ]
  }
}

DANGER

JSON νŒŒμΌμ΄λ―€λ‘œ 볡사해 뢙여넣을 λ•Œ 주석은 μ œκ±°ν•΄μ£Όμ„Έμš”.

# jest.config.js μ„€μ •

Vue-CLIλ₯Ό μ΄μš©ν•˜μ—¬ Unit Testing을 μ„ νƒν–ˆλ‹€λ©΄ jest.config.js νŒŒμΌμ„ μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€. npm으둜 직접 μ„€μΉ˜ν–ˆκ±°λ‚˜, 아직 파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ν”„λ‘œμ νŠΈ 경둜(μ΅œμƒμœ„)에 jest.config.js νŒŒμΌμ„ μƒμ„±ν•΄μ€λ‹ˆλ‹€.

module.exports = {
  // (vue-cli둜 μ„€μΉ˜ μ‹œ κΈ°λ³Έ μ„ΈνŒ…λ¨) vue-cli ν…ŒμŠ€νŠΈ ν™˜κ²½ 섀정을 μ‚¬μš©ν•©λ‹ˆλ‹€
  // 주의! preset 지정 ν›„ μ•„λž˜μ™€ 같이 각각 λ‹€μ‹œ μ„€μ •ν•˜λŠ” 경우, μƒˆλ‘œ μ„€μ •ν•œ λ‚΄μš©μœΌλ‘œ μ μš©λ©λ‹ˆλ‹€
  preset: "@vue/cli-plugin-unit-jest",
  moduleFileExtensions: [
    'js',
    'json',
    // λͺ¨λ“  vue 파일(`*.vue`)을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ Jestμ—κ²Œ μ•Œλ €μ€λ‹ˆλ‹€
    'vue',
  ],
  transform: {
    // `vue-jest`λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  vue 파일(`*.vue`)을 μ²˜λ¦¬ν•©λ‹ˆλ‹€
    '.*\\.(vue)$': 'vue-jest',
    // `babel-jest`λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  js 파일(`*.js`)을 μ²˜λ¦¬ν•©λ‹ˆλ‹€
    '.*\\.(js)$': 'babel-jest',
  },
  moduleNameMapper: {
    // 별칭 @(ν”„λ‘œμ νŠΈ/src) μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 경둜의 νŒŒμΌμ„ λ§΅ν•‘ν•©λ‹ˆλ‹€
    '^@/(.*)$': '<rootDir>/src/$1'
  },
  testMatch: [
    // __tests__ 경둜 ν•˜μœ„μ— μžˆλŠ” λͺ¨λ“  js/ts/jsx/tsx νŒŒμΌμ„ ν…ŒμŠ€νŠΈ λŒ€μƒμœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€
    '**/__tests__/**/*.[jt]s?(x)',
    // 'xxx.spec' λ˜λŠ” 'xxx.test'λΌλŠ” μ΄λ¦„μ˜ λͺ¨λ“  js/ts/jsx/tsx νŒŒμΌμ„ ν…ŒμŠ€νŠΈ λŒ€μƒμœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€
    '**/?(*.)+(spec|test).[jt]s?(x)'
  ],
  // node_modules 경둜 ν•˜μœ„μ— μžˆλŠ” λͺ¨λ“  ν…ŒμŠ€νŠΈ νŒŒμΌμ„ λŒ€μƒμ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€
  testPathIgnorePatterns: ['/node_modules/'],
  collectCoverage: true,
  collectCoverageFrom: [
    '**/*.{js,vue}',
    '!**/node_modules/**'
  ],
};

TIP

jest.config.js 파일둜 λΆ„λ¦¬ν•˜λ©΄ ν™˜κ²½ μ„€μ • λΆ€λΆ„λ§Œ λͺ¨μ•„놓을 수 μžˆμ–΄μ„œ μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§‘λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ΄λ―€λ‘œ 주석 μž‘μ„±λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

각 섀정에 λŒ€ν•œ 상세 μ„€λͺ…

preset

  • 이미 ν…ŒμŠ€νŠΈμ— ν•„μš”ν•œ κΈ°λ³Έ 섀정을 κ°–μΆ˜ μ™ΈλΆ€ ν™˜κ²½ 섀정을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • @vue/cli-plugin-unit-jest의 경우 vue-cli ν™˜κ²½μ— 맞좰 기본적으둜 μ„ΈνŒ…λœ ν…ŒμŠ€νŠΈ ν™˜κ²½ 섀정을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 기본적으둜 μ„ΈνŒ…ν•˜λŠ” λ‚΄μš©μ€ vue-cli github (opens new window)μ—μ„œ ν™•μΈν•΄λ³΄μ„Έμš”.

moduleFileExtensions

  • λͺ¨λ“ˆμ—μ„œ μ‚¬μš©ν•  파일 ν™•μž₯λͺ…을 μ§€μ •ν•©λ‹ˆλ‹€.

transform

  • λ³€ν™˜κΈ°(transformer, 우츑)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ§€μ •ν•œ λŒ€μƒ(쒌츑)을 λ³€ν™˜ν•©λ‹ˆλ‹€.

moduleNameMapper

  • λͺ¨λ“ˆ 이름(우츑)을 νŠΉμ • 이름(쒌츑)으둜 λ§΅ν•‘ν•˜μ—¬ μΉ˜ν™˜ν•©λ‹ˆλ‹€.
  • '^@/(.*)$': '<rootDir>/src/$1'μ—μ„œ $1은 쒌츑 μ •κ·œ ν‘œν˜„μ‹(Regular Expression) 쀑 (.*)와 μΉ˜ν™˜λ˜μ–΄, <rootDir>/src/ ν•˜μœ„μ˜ λͺ¨λ“  νŒŒμΌμ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

testMatch

  • ν…ŒμŠ€νŠΈ μ‹€ν–‰ μ‹œ λŒ€μƒμœΌλ‘œ ν¬ν•¨μ‹œν‚¬ νŒŒμΌμ„ μ§€μ •ν•©λ‹ˆλ‹€.

testPathIgnorePatterns

  • testMatchμ—μ„œ μ§€μ •ν•œ λŒ€μƒ 쀑 μ˜λ„μ μœΌλ‘œ ν…ŒμŠ€νŠΈ λŒ€μƒμ—μ„œ μ œμ™Έν•  경둜 λ˜λŠ” νŠΉμ • νŒ¨ν„΄μ„ 가진 λŒ€μƒμ„ μ§€μ •ν•©λ‹ˆλ‹€.
  • node_modules ν•˜μœ„μ—λŠ” 라이브러리 λͺ¨λ“ˆμ΄ μ„€μΉ˜λ˜μ–΄ μžˆμœΌλ‹ˆ 일반적으둜 λŒ€μƒμ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€.

collectCoverage

  • 컀버리지 μ •λ³΄μ˜ μˆ˜μ§‘ μ—¬λΆ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
  • ν…ŒμŠ€νŠΈ 컀버리지λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œ λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
    • true일 경우, ν…ŒμŠ€νŠΈ μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
    • false일 경우, 제슀트λ₯Ό λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰ν•  λ•Œ --coverageλ₯Ό 포함해주면 μƒμ„±ν•©λ‹ˆλ‹€.
  • κ²°κ³ΌλŠ” 터미널 λ˜λŠ” ν”„λ‘œμ νŠΈ/lcov-report/index.html을 열어보면 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

collectCoverageFrom

  • 컀버리지λ₯Ό μˆ˜μ§‘ν•  λŒ€μƒμ„ μ§€μ •ν•©λ‹ˆλ‹€.
  • μœ„ μ„€μ •μ˜ 경우, λͺ¨λ“  js 파일과 vue νŒŒμΌμ— λŒ€ν•˜μ—¬ μˆ˜μ§‘ν•˜λ©° node_modules에 μ‘΄μž¬ν•˜λŠ” νŒŒμΌμ„ λŒ€μƒμ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€.

μžμ„Έν•œ λ‚΄μš©μ€ Jest 곡식 λ¬Έμ„œμ˜ Configuring Jest (opens new window)μ—μ„œ ν™•μΈν•΄λ³΄μ„Έμš”.

이제 λ‹€μŒ μ±•ν„°μ—μ„œ κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.