๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

front-TEST

์‹ค๋ฌด์—์„œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์ ์šฉ๊ธฐ [cypress, vue]

๐Ÿ‘๏ธ‍๐Ÿ—จ๏ธ ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

ํ˜„์žฌ ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ํƒ์‹œํšŒ์‚ฌ erp ์‹œ์Šคํ…œ์ด ๊ทœ๋ชจ๊ฐ€ ๊ฝค ์ปค์กŒ๋‹ค.

ERP ์‹œ์Šคํ…œ์ธ ๋งŒํผ  ๊ธ‰์—ฌ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃจ๊ณ  ๋งŽ์€ ํƒ์‹œํšŒ์‚ฌ๋“ค์„ ๋‹ค๋ฃจ๊ฒŒ ๋˜๋‹ค๋ณด๋‹ˆ ๊ด€๋ฆฌํฌ์ธํŠธ๋„ ์ปค์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์— ์„œ๋กœ ์˜ํ–ฅ์ด ๊ฐ€๋Š” ๊ธฐ๋Šฅ๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊ธฐ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์žกํ•จ์„ ๋Š๋ผ์ง€ ์•Š๋Š”์ง€, flow ์— ๋ฐฉํ•ด๊ฐ€ ๋˜๊ฑฐ๋‚˜ ํ˜ผ๋ˆ์„ ์ฃผ์ง€ ์•Š๋Š”์ง€,  ๋“ฑ๋“ฑ์„ ๊ณ ๋ คํ•ด์„œ ํ…Œ์ŠคํŠธํ•ด์•ผํ•œ๋‹ค.

๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋น ๋ฅด๊ณ  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์„๊นŒ ๋ผ๋Š” ๊ณ ๋ฏผ๋„ ์ปค์ง€๊ฒŒ ๋˜์—ˆ๊ณ  ์ด์Šˆํ”ฝ์Šค์— ๋”๋”์šฑ์ด๋‚˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

+ ํŒ€์›๋“ค์˜ PR๋ฆฌ๋ทฐํ•˜๋Š”๋ฐ ์‹œ๊ฐ„๋„ ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค... 

 

์ฆ‰, ํ…Œ์ŠคํŠธํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œ์ผœ๋ณด์ž! 

 

 

 

โžฟ ์™œ E2E?

 

snapshot test, unit test, integration test,  e2e test..  ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ์—๋Š” ์ข…๋ฅ˜๊ฐ€ ๋งŽ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ๋™์ž‘ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ํ…Œ์ŠคํŠธ์˜ ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค.

์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•˜๋˜ ์ค‘ ๊ฒ€์ƒ‰ํ•˜๋‹ค๊ฐ€ cypress ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

cypress๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ์  ๋””๋ฒ„๊น… ๊ธฐ๋Šฅ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ํ…Œ์ŠคํŠธ์—ฌ์„œ ์‹ค๋ฌด์— ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 


๐ŸŒ€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •

 

โœณ๏ธ E2E

 

๐Ÿ”— ํ”„๋กœ์ ํŠธ setup

1๏ธโƒฃ ์„ค์น˜

npm install cypress --save-dev

 

2๏ธโƒฃ script

"e2e": "cypress run --browser chrome", // terminal ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ
"e2e": "cypress open --browser chrome", // web ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ

ํ•ด๋‹น script๋ฅผ ์‹คํ–‰ ์‹œํ‚ฌ ๊ฒฝ์šฐ ๋กœ์ปฌ ์„œ๋ฒ„์— ์‹คํ–‰ ์ค‘์ด์–ด์•ผ ํ•œ๋‹ค.

 

3๏ธโƒฃ cypress๋ฅผ ์„ค์น˜ํ•˜๊ฒŒ ๋˜๋ฉด ๋กœ์ปฌ ํ”„๋กœ์ ํŠธ์— configํŒŒ์ผ์ด ์ƒ๊ธฐ๋Š”๋ฐ baseUrl ์„ค์ •ํ•ด ์ค€๋‹ค. 

import { defineConfig } from 'cypress'

export default defineConfig({
  e2e: {
    baseUrl: 'http://localhost:8081',
    setupNodeEvents(on, config) {
      // implement node event listeners here
    },
  },
})

 

4๏ธโƒฃ ๋กœ์ปฌ ํ”„๋กœ์ ํŠธ์— cypress๋ผ๋Š” directory๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  4๊ฐ€์ง€ ํด๋”๊ฐ€ ์•ˆ์— ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ e2eํ…Œ์ŠคํŠธ์— ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ํ•œ๋‹ค.

 

 

 

 

 

โœณ๏ธ  Units

 

 

Tool Options

โ˜‘๏ธ Vitest

- vite ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  vite ์—์„œ ๋‚˜์˜จ ์ตœ์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์จ ์ง€๊ธˆ ํ”„๋กœ์ ํŠธ๋ž‘ ์ข€ ๋” ์ž˜ ๋งž์ง€ ์•Š์„ ๊นŒ?

- ์‹คํŒจ -> ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๋…ธ๋“œ ๋ฒ„์ „์ด 14.xx.. ์ธ ์ด์œ ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ ๋ฐœ์ƒ

 

Vitest ์—ญ์‹œ node version 18.0 ์ด์ƒ์„ ์š”๊ตฌํ•จ

 

node version ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์ง€๋งŒ (ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” lerna๋กœ ๋ชจ๋…ธ๋ ˆํฌ ์‚ฌ์šฉ์ค‘)ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋กœ ์‰ฝ๊ฒŒ ์˜ฌ๋ฆด ์ˆ˜ ์—†๋‹ค ..

 

 

โ˜‘๏ธ Jest

์˜ค๋ž˜์ „๋ถ€ํ„ฐ ํƒ„ํƒ„ํ•˜๊ฒŒ ์Œ“์•„์˜จ ์ด๋ ฅ์ด ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ์ง€ ์ด์ „ ๋ฒ„์ „์—๋„ ์œ ์—ฐํ•œ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

 

 

 Vitest vs Jest

chat gpt ์— ๋ฌผ์–ด๋ดค๋‹ค
 
 
 

 

์ž…๋ง›์— ๋งž์ถฐ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๋“ฏ ํ•˜๋‹ค...

 

 

 

 

 

๐Ÿ”— ํ™˜๊ฒฝ์„ค์ •

๋”๋ณด๊ธฐ

์ฐธ๊ณ  ๋ ˆํผ๋Ÿฐ์Šค

- ts-jest

- jest

 

1๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

$ npm install --save-dev jest ts-jest @types/jest

 

2๏ธโƒฃ ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ ํ–ˆ์„ ๊ฒฝ์šฐ์—๋„ ๋ชป ๋ถˆ๋Ÿฌ ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

$ npx ts-jest config:init

 

3๏ธโƒฃ ์ด๋ ‡๊ฒŒ ํ•ด์„œ jest config ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•œ๋‹ค. ์ดํ›„ ๋”ฐ๋กœ config ํŒŒ์ผ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•˜๋‹ค.

// jest.config.js file

/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};

 

4๏ธโƒฃ package.json -> script ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•œ๋‹ค.

"scripts": {
	... ,
    "test": "jest"
  },

 

 

 

 


๐ŸŒ€ํ…Œ์ŠคํŠธ ํŒŒ์ผ์˜ ๊ตฌ์กฐ

 

 

 

โ‡ฒ  E2E

project-name/
โ”œโ”€โ”€ cypress/
โ”‚   โ”œโ”€โ”€ download/
โ”‚   โ”œโ”€โ”€ e2e/
โ”‚   โ”œโ”€โ”€ fixtures/
โ”‚   โ”œโ”€โ”€ screenshots/
โ”‚   โ””โ”€โ”€ support/
โ””โ”€โ”€ ...

 

โ‡ฒ  Units

project-name/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ tests/
โ””โ”€โ”€ ...

 

 

 

 

 

 

 


 

๐ŸŒ€ E2E ํ…Œ์ŠคํŠธ CI ์ ์šฉ

pipelines:
  branches:
    develop:
      - step:
          name: e2e test 
          image: cypress/browsers:node-20.9.0-chrome-118.0.5993.88-1-ff-118.0.2-edge-118.0.2088.46-1
          caches:
            - node
            - cypress/browsers:node-20.9.0-chrome-118.0.5993.88-1-ff-118.0.2-edge-118.0.2088.46-1
          script:
            - npm install
            - npx lerna bootstrap --hoist
            - npx lerna run dev --scope=rev-erp &
            - npx lerna run e2e --scope=rev-erp

 

 

 

 

 

 

์–ด๋Š์ •๋„ e2e ํ…Œ์ŠคํŠธ ํ•  ๊ธฐ๋ณธ์€ ๋งŒ๋“ค์–ด ๋†จ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ ์šฉํ•ด ๋ณผ ์˜ˆ์ •~

 

 

 

์ฐธ๊ณ 

728x90
๋ฐ˜์‘ํ˜•