์ฒ์์ผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ณ ๊ฒช์ ๊ณผ์ ๊ณผ ๋๋์ ๊ทธ๋ฆฌ๊ณ ์์ํ ํ๋ค์ ์ ์ด๋ณด๋ คํ๋ค.
ํ ์คํธ ์ฝ๋๋ผ.. ์ค๋์ ๋ถํฐ ๋ค์ด์๊ณ ๋ง์ ์๋๋ฅผ ํด์์๋ค. ์ด๋ก ์ ์ผ๋ก ํ ์คํธ๋ฅผ ๊ณต๋ถํ๊ณ ์ ๋ง์ ํ๋ก์ ํธ์ ๋์ ์ ํด๋ณด๋ ค ํ์ผ๋ ๋ฒ๋ฒ์ด ์คํจํ์๋ ๊ธฐ์ต์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ค ์ค๋ ์์ฑํ ํ ์คํธ ์ฝ๋๊ฐ ์ข์ ์ฝ๋์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๋ชจ๋ ๊ฒ์ ์ฒ์์ด ์์๊ธฐ์ ๋์ด ์๊ธฐ ๋ง๋ จ์ด๋ค. ์ค๋์ ๋์ ์ ํ๋์ ์๋ฐ์ ์ผ๋ก ๋๊ณ ๋์ฑ ๊ณต๋ถํด์ผ ๊ฒ ๋ค.
๋๋ TS๋ฅผ ์ฌ์ฉํ๊ณ webpack์ ์ง์ ์ธํ
ํ์ฌ React ๊ฐ๋ฐ์ ํ๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ์ CRA
๋ฅผ ์ฌ์ฉํ์์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก install ๋์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ง์ ๋ค์ด๋ฐ์์ผํ๋ค.
ํ ์คํธ ๊ด๋ จํด์ 1~2๋ ์ ๊ธ์ ๋ง์์ง๋ง ์ต๊ทผ ๊ธ์ ์์ด์ ํ๋ ์ ์์ด ์ฌ๋ฌ ๋ธ๋ก๊ทธ์ ์ฌ์ดํธ์์ ์ ๋ณด๋ฅผ ๋ชจ์๋ค. ๊ทธ๋ ๊ฒ ๋๋ ์ด์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ install ํ ์ ์์๋ค.
npm i -D enzyme enzyme-adapter-react-16 enzyme-to-json @types/enzyme
npm i -D jest ts-jest babel-jest @types/jest
npm i -D react-test-renderer @types/react-test-renderer
๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ค๋ช ์ velopert๋์ ๋ฆฌ์กํธ ํ ์คํธ ๊ธ์ ์์ธํ ์ค๋ช ๋์ด์๋ค.
๊ฐ๋จํ๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ๊ณ test setting
์ ํด์ผํ๋ค. ๊ทธ๋์ jest.config.js๋ฅผ ์ค์ ํ๋๋ฐ ์ฌ๋ฌ ๋ธ๋ก๊ทธ์์ jest์ ํ์ผํ์ฅ์๋ฅผ js
๋ก ์ค์ ํ์์๋ค. webpack.config.ts
๋ postcss.config.ts
๊ฐ์ ๊ฒฝ์ฐ๋ ํ์ฅ์๋ฅผ ts
๋ก ํ์ฌ๋ ์ค๋ฅ์์ด ์ ๋์๊ฐ์ ๋น์ฐํ jest.config.ts
๋ก ๋๊ณ ์ธํ
์ ํ์๋๋ฐ ๊ณ์ ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค.
์ค๋ง ํ๊ณ ํ์ฅ์๋ฅผ js
๋ก ๋ฐ๊ฟ๋ณด์๋๋ฐ.. ๋ง๋ค์ด ๋ ์ธํ
์ด ์ ์๋๋์ ๋นํฉํ์๋ค. ๊ทธ๋ฌ๋ ํ์ฅ์๋ฅผ js
๋ก ํ์.
jest.config.js
ํ์ผ์ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์
๋ ฅํด ์ค๋ค.
jest.config.js
module.exports = {
globals: {
"ts-jest": {
tsConfig: "tsconfig.json",
diagnostics: true
}
},
moduleFileExtensions: ["ts", "js", "tsx", "jsx"],
moduleNameMapper: { // ์ ๋ ๊ฒฝ๋ก
"^src/(.*)": "<rootDir>/src/$1",
...
},
transformIgnorePatterns: ["./node_modules/"],
preset: "ts-jest",
transform: {
"^.+\\.(ts|tsx)$": "ts-jest"
},
testMatch: ["**/test/**/*.test.(ts|tsx)"],
testEnvironment: "node",
snapshotSerializers: ["enzyme-to-json/serializer"],
setupFilesAfterEnv: ["./src/test/setUpTest.ts"]
};
๋๋ ๊ฐ๋ฐํ๋ฉด์ ์ ๋๊ฒฝ๋ก
๋ฅผ ์ฌ์ฉํ๋๋ฐ jest์์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ ์กฐ๊ธ ์ ๋จน์๋ค. ๋ถ๋ช
์ํค๋ ๋๋ก ํ๊ณ , ๋์์๋๋ฐ๋ก ์ค์ ํ๋๋ฐ ์ ์๋ ๊น.. ์ถ์๋๋ฐ!
ํ์ฌ ์์ ์ฝ๋์์ moduleNameMapper
๋ถ๋ถ์ด ์ ๋๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ์ด๋ค. ๋ณด๋ฉด ์๊ฒ ์ง๋ง ๋๋ src
๋๋ ํ ๋ฆฌ๋ฅผ ์ ๋๊ฒฝ๋ก๋ก ํ๊ธฐํ๋ค.
"^src/(.*)": "<rootDir>/src/$1"
์ด์ ๊ฐ์ด ์ ํ์๋๋ฐ "^src/(.*)"
์์ ^
๋ฅผ ์ ๋๊ฒฝ๋ก๋ก ์ฌ์ฉํ๋ ๋ฌธ์์ด ๊ตฌ๋ฌธ์ธ ์ค ์๊ณ ๋นผ๊ณ ์ ์๋ค๊ฐ ์ ๋ ๋ก ์ค์ ์ด ์ ์๋ฌ๋ค..
๊ทธ๋ฆฌ๊ณ "<rootDir>/src/$1"
์์ <rootDir>
๋ฅผ ๋์ ๋๋ ํ ๋ฆฌ์ root๋ฅผ ์ ์ผ๋ผ๋ ์ค ์๊ณ .
์ ์ฐ์๋ค๊ฐ ์ ๋๊ฒฝ๋ก ์ค์ ์ด ์ ์๋์๋ค.
์ด ๋ถ๋ถ ๊ผญ ์ฐธ๊ณ ํด์ ์ค์ ํ ์ ์๋๋ก ํ์.
ํน์ ํ๊ฐ๋ฆด ์ ์์ผ๋ tsconfig.json
๊ณผ jest.config.js
์ ์ ๋๊ฒฝ๋ก ๋ถ๋ถ์ ์ฌ์ง์ผ๋ก ์ฌ๋ ค๋์๋ค.
์ด์ ๋ง์ง๋ง์ผ๋ก package.json
์ script
ํญ์๋ค๊ฐ ์คํ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ์ค๋ค.
package.json
{
...
"scripts": {
...
"test": "jest"
}
}
์ด๋ ๊ฒ Typescript
์ Jest, enzyme
๋ฅผ ์ด์ฉํ Test setting์ ๋ง์น ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ src/test/**/*.test.(ts|tsx)
์ test ํ์ผ์ ์์ฑํ ์ ์๋ค.
๋๋ ํ๋๋ฅผ ํ๋๋ผ๋ ๋ด๊ฐ ํ ์ ์๋ ์ญ๋ ์์์ ์ต๋ํ ์๋ฒฝํ๊ฒ ๋ง๋ค๊ณ ์ถ์ดํ๋ ์๋ฒฝ์ฃผ์์ ์ด๋ค. ๊ทธ๋์ ํ ์คํธํ๊ฒฝ์ ์ค์ ํ ๋๋ ์ต๋ํ์ผ๋ก ์ค์ ํด๋ณด์์ง๋ง ์๋ฌด๋๋ ์์ง ์์ฑํ ๋ถ๋ถ์ด ์๋ ๊ฒ ๊ฐ๋ค. ๋์ค์ ๊ผญ ์๊ฐ๋๋ฉด ๋ณด์ํ ๊ฒ ์ด๋ค.
์ ์ ๋ eject ๋ก ํด์ ์๋ฌ ํ๋ฃจ์ข ์ผ ์ฐพ๋ค๊ฐ ํด๊ฒฐํ์๋ค์ ๊ฐ์ฌํฉ๋๋ค :)