๐ง ์ ๋๊ฒฝ๋ก import ?
๋ณดํต ๋๋ ํ ๋ฆฌ๊ตฌ์กฐ๊ฐ ๋ณต์กํ์ง ์๋ค๋ฉด import ์ ์๋๊ฒฝ๋ก๋ก ์ค์ ํด๋ ํฐ ๋ถํธํจ์ด ์๋ค.
๊ทธ๋ฌ๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ์๋ก ์๋๊ฒฝ๋ก๊ฐ ๊ธธ์ด์ง๊ณ ๋ณด๊ธฐ ์์ข์์ง๊ฒ ๋๋๋ฐ,
๋์ ๊ฒฝ์ฐ ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ ๋๊ฒฝ๋ก๋ก importํ ํ์์ฑ์ ๋๋ผ๊ฒ๋์๋ค.
๋๋ ํ ๋ฆฌ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
โโโ _test/
ใด_reducer/
ใด todo.test.ts
ใด components/
ใด hooks/
...
โโโ src/
ใด _reducer/
ใด todo.ts
ใด components/
ใด hooks/
...
srcํด๋์ ๊ฐ์ deps์ _testํด๋๊ฐ ์กด์ฌํ๊ธฐ๋๋ฌธ์
_testํด๋์ ํ์ผ์์ srcํด๋์ ํ์ผ๋ค์ importํ๊ธฐ ์ํด์๋ ์กฐ๊ธ์ ์ด์ง๋ฌ์ด ์๋๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ผํ๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ๊ฐ๋จํํ๊ธฐ ์ํด์ ์ ๋๊ฒฝ๋ก๋ก importํ๋ alias ์ค์ ์ ์ฐพ์๋ดค๋ค.
๐ Alias ์ค์ ํ๊ธฐ
react์์ alias๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์
- ์ง์ ๋ฐ๋ฒจ,์นํฉ์ ์ค์ ํ๋ ๊ฒฝ์ฐ์
- CRA๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ
์ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
์ง์ ์ค์ ํ๋ ๊ฒฝ์ฐ webpack์ ์ง์ ์์ ํ์ฌ ์ค์ ํ๋ฉด ๋์ง๋ง,
CRA์์ webpack์ ์์ ํ๋ ค๋ฉด ์์ ์ ์ํ ๋ชจ๋์ ์ค์นํ์ฌ ์์ ํด์ผ ํ๋ค.
์ด๋ฒ ๊ธ์์๋ CRA์์ Alias๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
webpack ์์ ๋ชจ๋ - craco
webpack ์์ ์ ์ํ ๋ชจ๋์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ๊ทธ ์ค craco๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํด๋ณด๋๋กํ๊ฒ ๋ค.
craco๋ฅผ ํตํด webpack์ ์์ ํ๊ธฐ์ํด ์ด๋ฅผ ์ค์นํด์ฃผ์.
npm install --save-dev @craco/craco craco-alias
1. tsconfig.paths.json ํ์ผ ์์ฑ
๋ฃจํธ์์น์ tsconfig.paths.json
์ ์์ฑํ๋ค.tsconfig.json
์ path๋ฅผ ์ง์ ์์ ํ๋ฉด ๋ฆฌ์กํธ ํ๋ก์ ํธ ๋น๋์, ์๋์ผ๋ก ์ด๊ธฐํ๋๊ธฐ๋๋ฌธ์ ์ด๋ฌํ pathsํ์ผ์ ๋ฐ๋ก ๋ง๋ค์ด์ค๋ค.
// tsconfig.paths.json
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
}
}
paths
์ ์ํ๋ alias๋ฅผ ์ค์ ํ๋ฉด ๋๋ค.
์์ ๊ฐ์ด ์ค์ ํ๋ฉด ../../../src/components/TodoList.tsx
๋ฅผ @/components/TodoList.tsx
๋ก ์๋๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ ์๋ค.
2. craco.config.js ํ์ผ ์์ฑ
๋ฃจํธ์์น์ craco.config.js
๋ฅผ ์์ฑํ๋ค.
// craco.config.js
const CracoAlias = require('craco-alias');
module.exports = {
plugins: [
{
plugin: CracoAlias,
options: {
source: 'tsconfig',
tsConfigPath: 'tsconfig.paths.json',
},
},
],
};
3. tsconfig.jsonํ์ผ์ extends๋ฅผ ์ถ๊ฐํด์ค๋ค.
// tsconfig.json
{
"extends": "./tsconfig.paths.json",
"compilerOptions": {
...
}
...
}
4. jest์ค์ ์ถ๊ฐ
ํ
์คํธํ์ผ์์๋ ์ ๋๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด jest.config.js
์ moduleNameMapper
์ ์์ ํด์ค๋ค.
module.exports={
...
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
},
}
5. package.json ํ์ผ ์์
craco์ค์ ์ ์ ์ฉํ๊ธฐ์ํด package.json
ํ์ผ์ react-scripts๋ฅผ craco๋ก ์์ ํ๋ค.
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "jest --env=jsdom",
"eject": "craco eject"
}
๐ ๊ฒฐ๊ณผ
ํ ์คํธ์ฝ๋๋ฅผ ํฌํจํ ํ๋ก์ ํธ ํด๋์์ ์๋์ ๊ฐ์ด ์ ๋๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
import prepareReduxWrapper from '@/lib/prepareReduxWrapper';
import TodoFilters from '@/components/TodoFilters';
๐ ์ฐธ๊ณ
'๊ฐ์ธ๊ณต๋ถ > TDD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React Testing: Components testing (0) | 2021.11.25 |
---|---|
React Testing: Hooks testing (0) | 2021.11.21 |
React Testing: Reducer testing (with Redux) (0) | 2021.11.17 |
jest ํ๊ฒฝ์์ import ์ฌ์ฉ ์ค์ ํ๊ธฐ(typescript) (0) | 2021.10.19 |
Jest ์ด๊ธฐํ๊ฒฝ ์ค์ ์์ ์๋ฌํธ๋ค๋ง (0) | 2021.09.13 |