Vue2에 jest적용하기

2022. 5. 30. 16:00·Vue

cracking vue.js사이트를 보며 진행했습니다.

https://joshua1988.github.io/vue-camp/testing/overview.html

 

Overview | Cracking Vue.js

테스트 코드가 필요한 이유 개발자에게 테스트 코드가 필요한 이유는 아래 2가지에 소모되는 시간을 줄이기 위해서입니다. 애플리케이션이 커지면 커질수록 위 시나리오를 점검하는데 많은 시

joshua1988.github.io

 

1. 라이브러리 설치

npm install --save-dev jest

 

2. 테스트 파일 생성

app.vue와 같은 폴더 내에 app.test.js라는 파일을 생성했다.

 

3. 테스트 파일 경로 설정

// jest.config.js
module.exports = {
  testMatch: ['**/*.spec.[jt]s?(x)', '**/*.test.[jt]s?(x)'],
};

 

4. 테스트 코드 실행

// 콘솔
npx jest

위와 같은 에러가 발생한다.

이 경우 @types/jest를 설치하니 테스트는 실행된다.

하지만, 아직도 app.test.js파일에는 빨간색 밑줄은 남아있다.

이 문제는 eslint-plugin-jest를 설치하니 해결되었다.

npm install eslint-plugin-jest

그러자 이번에는 const에서 에러가 났다.

.eslintrc파일을 만들어 es6문법을 허용해주도록 한다.

이제, 문제 없이 테스트가 잘된다.

 

5. Jest의 뷰 컴포넌트 테스팅

위와 같이 vue파일을 작성하고 테스트 파일을 만든다.

위와 같은 에러가 발생한다.

에러의 의미는 '뷰 컴포넌트는 제스트가 해석할 수 있는 유형의 파일이 아니다'라고 한다. 이 때문에 제스트가 해석할 수 있도록 변환해주는 도구가 필요하다. 이 도구가 vue test utils(테스트 보조 라이브러리)이다.

 

6. vue test utils설치

npm install jest @vue/test-utils vue-jest babel-jest --save-dev
npm install @babel/core @babel/preset-env babel-core@^7.0.0-bridge.0 --save-dev
// package.json
{
  "babel": {
    "presets": ["@babel/preset-env"]
  },
  "jest": {
    "moduleNameMapper": {
      // 별칭 @(프로젝트/src) 사용하여 하위 경로의 파일을 맵핑합니다
      "^@/(.*)$": "<rootDir>/src/$1"
    },
    "collectCoverage": true,
    "collectCoverageFrom": [
      "**/*.{js,vue}",
      "!**/node_modules/**"
    ]
  }
}

위와 같이 작성하면 아래와 같은 에러가 발생한다.

암시적 구성 확인에서는 여러 구성 파일을 사용할 수 없습니다.
사용하지 않는 구성 파일을 제거하거나 "--config"로 명시적으로 하나를 선택하십시오.

jest.config.js파일이 있는데 package.json에 중복으로 써서 이런 에러가 나온거 같다.

 

7. jest 환경설정

module.exports = {
  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',
  },
  testMatch: [
    // __tests__ 경로 하위에 있는 모든 js/ts/jsx/tsx 파일을 테스트 대상으로 지정합니다
    '**/__tests__/**/*.[jt]s?(x)',
    // 'xxx.spec' 또는 'xxx.test'라는 이름의 모든 js/ts/jsx/tsx 파일을 테스트 대상으로 지정합니다
    '**/?(*.)+(spec|test).[jt]s?(x)'
  ],
  moduleNameMapper: {
    // 별칭 @(프로젝트/src) 사용하여 하위 경로의 파일을 맵핑합니다
    '^@/(.*)$': '<rootDir>/src/$1'
  },
  collectCoverage: true,
  collectCoverageFrom: [
    '**/*.{js,vue}',
    '!**/node_modules/**'
  ]
}

 

8. 이제 뷰 테스트 코드를 작성하면 된다.

 

'Vue' 카테고리의 다른 글

Lifecycle Hooks  (0) 2022.12.20
vue style guide  (0) 2022.09.07
다국어 처리하기 with vue-i18n  (0) 2022.08.23
HOC(higher-order component)  (0) 2022.06.22
Vue  (0) 2021.09.27
'Vue' 카테고리의 다른 글
  • vue style guide
  • 다국어 처리하기 with vue-i18n
  • HOC(higher-order component)
  • Vue
JoyYellow
JoyYellow
  • JoyYellow
    JoyYellow
    JoyYellow
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • Vue (7)
      • React (10)
      • 알고리즘 풀이 (29)
      • 타입스크립트 (2)
      • Microsoft (4)
      • TIL(Today I Learned) (16)
      • Devops (4)
      • CS(Computer Science) (2)
      • Spring (1)
      • Incomplete (0)
      • JS소스모듈 (10)
      • TDD (2)
      • 스프링부트 (0)
      • CSS (8)
      • Next.js (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    노개북
    노마드코더
    개발자북클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
JoyYellow
Vue2에 jest적용하기
상단으로

티스토리툴바