์ด๋ฒ ํฌ์คํธ์์๋ TypeScript ํ๊ฒฝ์์ Jest ๋ก ์ ๋ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ํด ํ์ํ ์ค์ ๋ค๊ณผ
ํ์ธ์ ์ํ ๊ฐ๋จํ ์์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
์ฌ์ฉํ ํ ์คํธ ํ๋ ์์ํฌ๋ ๊ฐ์ฅ ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ Jest ์ ๋๋ค.
๐ Jest ์ค์
1๏ธโฃ ํจํค์ง ์ค์น
๋จผ์ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
npm i -D jest @jest/globals ts-jest
๐ก @jest/globals
๋ช ์์ ์ธ import ๋ฅผ ์ ํธํ๊ธฐ์, ํด๋น ํจํค์ง๋ฅผ ์ฌ์ฉํด์ jest api ์ฌ์ฉํ์ต๋๋ค.
๐ก ts-test
TS ๋ก๋ ๋ชจ๋ ํ ์คํธ๋ฅผ ์ํํ ๋ ์ปดํ์ผ + ํ์ ์ฒดํฌ๊น์ง ํจ๊ป ์ํํ ์ ์๋๋ก ํด์ค๋๋ค.
2๏ธโฃ config ํ์ผ ์ถ๊ฐ
// jest.config.js
/** @type {import('jest').Config} */
const config = {
verbose: true,
transform: {
'^.+\\\\.tsx?$': 'ts-jest',
},
moduleNameMapper: {
'@/(.*)$': '<rootDir>/src/$1',
},
}
module.exports = config
๐ก verbose
๋ชจ๋ ํ ์คํธ ๋ก๊ทธ๋ค์ ๊ณ์ธต๊ตฌ์กฐ๋ก ํฐ๋ฏธ๋์ ๋ ธ์ถํฉ๋๋ค.
๐ก transform
typescript ํ์ผ์ ๋ํด์ ts-test ๋ฅผ ์ ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ํ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก๋ jest ๋ด๋ถ์์ babel-jest ์ฌ์ฉํฉ๋๋ค.
๐ก moduleNameMapper
ํ ์คํธ ํ์ผ (*.spec.ts, *.test.ts) ๋ด์์ import path alias ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋งคํผ ์ค์ ์ ๋๋ค.
๊ทธ ์ธ์ ์ค์ ์ต์ ๋ค์ ์๋ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋ฉ๋๋ค.
3๏ธโฃ test run script ๋ฑ๋ก
package.json ์ test ๋ฅผ ์ํํ script ๋ฅผ ๋ฑ๋กํฉ๋๋ค.
scripts: {
"test": "jest --watch"
}
๐ ํ ์คํธ ์ฝ๋ ์์ฑ
์ ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํ ๊ฐ๋จํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ด ๋๋ค.
// add.spec.ts
import { test, expect } from '@jest/globals'
function add(a: number, b: number) {
return a + b
}
test('add', () => {
expect(add(1, 2)).toBe(3)
})
์ด์ ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋์ฌ๋ณด๋ ์ผ๋ง ๋จ์๋ค์ ๐
๐ ์ฐธ๊ณ ์๋ฃ
'๐จโ๐ป web.dev > js.ts' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DOM event.composed (shadow root ๋ฐ์ผ๋ก ์ด๋ฒคํธ ์ ํ์ํค๊ธฐ) (0) | 2023.05.15 |
---|---|
async function ์๋ณํ๊ธฐ (1) | 2022.08.08 |
[JavaScript] Debounce ์ Throttle ์ ๋ํด ์์๋ณด์ (0) | 2022.07.09 |
[TypeScript] enum ๊ณผ union type, ์ธ์ ์จ์ผํ ๊น? (2) | 2022.07.09 |
[JavaScript] Array.sort ๋ ์์ ์ฑ์ ๋ณด์ฅํ ๊น? (0) | 2022.03.09 |
๐ฌ ๋๊ธ