๊ฐ๋จํ ๋ชจ๋์ ํ ์คํธํ๋ ค๊ณ ํ๋๋ฐ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Test suite failed to run
/home/matheusml/Projects/react-completo/src/assets/images/dribble-logo.png:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){๏ฟฝPNG
^
SyntaxError: Invalid or unexpected token
at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)
at Object.<anonymous> (src/components/container/Container.js:4:46)
at Object.<anonymous> (src/components/App.js:4:44)
์ด๊ฒ์ ํ ์คํธ์ ๋๋ค:
import React from 'react';
import renderer from 'react-test-renderer';
import { Router } from 'react-router';
import App from './App';
test('App', () => {
const component = renderer.create(
<App />
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
์ด๊ฒ์ ๋ด package.json์ ๋๋ค.
"jest": {
"moduleNameMapper": {
"\\.(jpg|jpeg|png|svg)$": "./src/config/fileMock.js",
"\\.(css|scss)$": "identity-obj-proxy"
}
}
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ํ์ผMock.js์ ๋๋ค:
module.exports = 'test-file-stub';
๊ฐ์ฌ ํด์!
http://facebook.github.io/jest/docs/tutorial-webpack.html#content ๋ฅผ ํ์ธํ์ธ์.
ํธ์ง: ์ ๋งํฌ๋ https://jestjs.io/docs/en/webpack ์ ๋๋ค.
@matheusml ์ด๊ฑฐ ์ ํ ํด๊ฒฐํ์ จ๋์? @cpojer ์ ๋ ์ด ๋ฌธ์ ๊ฐ ์์์ ํ์ธํ ์ ์์ต๋๋ค. ์์ค ์ธ๋ถ์ ์ ์ ์์ฐ์ด ์์ต๋๋ค. ์ฆ ๋ด ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
|-fonts
|-img
\_styles
src
|-components
|-pages
...
๋ด jest ๊ตฌ์ฑ์ ๋งํฌ์ ์ ๊ณต๋ ์์ ์ ์ ์ฌํฉ๋๋ค.
"jest": {
"collectCoverageFrom": [ "src/**/*.{js,jsx}" ],
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "tests/__mocks__/fileMock.js"
}
}
์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ฉด ํ ์คํธ๊ฐ ์คํจํฉ๋๋ค.
import thumbnail from 'img/thumbnail.png'
public
๋๋ ํ ๋ฆฌ๋ฅผ moduleDirectories
์ ํฌํจํ์ง ์์ผ๋ฉด Cannot find module 'img/thumbnail.png' from 'MyModule.js'
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์๋๋ ์ผ์ ๋๊น? ๋ชจ๋ ๋งคํ์ด ์ด๋ฏธ ์ค์ ๋์ด ์์ง๋ง ๊ฐ์ ธ์ค๊ธฐ ์ด๋ฒคํธ์ ์กด์ฌ๋ฅผ ์ค์ ๋ก ๊ฒ์ฆํด์ผ ํฉ๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฆ ๋งคํผ์์ ๋ค๋ฅธ ์ ํ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์๋ํ์ง ์์์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ผ๋ฉฐ reactjs ์๋ฒ ๋ ๋๋ง์ ๊ตฌํํ๋ ค๊ณ ํฉ๋๋ค. ์ด์ ๋ํ ๋ชจ๋ ์์ ์ฌํญ.
๋๋ ์ด๊ฒ์ ๋ด babelrc์ ๋ฃ์๊ณ ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
{
"์ฌ์ ์ค์ ": ["es2015", "๋ฐ์"]
}
๊ฐ์ ์ ํ ์ค๋ฅ
SyntaxError: Unexpected token <
/media/sibin/F_WORK/<path>/<icon-name>.svg:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){<?xml version="1.0" encoding="UTF-8"?>
^
SyntaxError: Unexpected token <
์ ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. png๊ฐ ํ์ํ ๋๋ง ๋ฐ์ํฉ๋๋ค.
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){๏ฟฝPNG
^
SyntaxError: Invalid or unexpected token
๊ฐ์ ์ค๋ฅ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋๊ตฐ๊ฐ ๊ณ ์ณ์ฃผ๋์?
.mp3์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฌด ๊ฒ๋ ๋์์ด ๋์ง ์์ต๋๋ค.
์ด์ ๊ฐ์ ์ค๋ฅ๋ ์๋ฅผ ๋ค์ด ๋ชจ๋ ์ด๋ฆ ๋งคํผ์ ์ ๋ ๊ฒฝ๋ก๊ฐ ์ค์ ๋ ์ฌ์ ์ค์ ์ ์ฌ์ฉํ ๊ฒฐ๊ณผ์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ๋ ๋ค์ ๋ฆด๋ฆฌ์ค์์ ์์ ๋ฉ๋๋ค.
๋๋ ๊ฐ์ ์ค๋ฅ๊ฐ ์์๊ณ assetsTransformer.js ๋ฅผ ๋ง๋ค์ด ํด๊ฒฐํ์ต๋๋ค.
const path = require('path');
module.exports = {
process(src, filename, config, options) {
return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';';
},
};
๊ทธ๋ฐ ๋ค์ package.json์ jest ๊ตฌ์ฑ์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.
"jest": {
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/assetsTransformer.js",
"\\.(css|less)$": "<rootDir>/assetsTransformer.js"
}
},
์ถ์ฒ: https://facebook.github.io/jest/docs/webpack.html#content
์ ๊ฒฝ์ฐ์๋ <rootDir>
๊ฐ Jest์์ ์ ๊ณตํ ํ ํฐ ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ๊ณ ๊ต์ฒดํด์ผ ํ๋ ํ ํฐ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. moduleNameMapper
ํญ๋ชฉ์ ์ถ๊ฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
@bombellos๊ฐ ์ธ๊ธํ assetTransformer.js
๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๋ํ ์นํฉ๊ณผ ํจ๊ป ์ฌ์ฉ ์ ๋ํ ์ง์นจ์ ๋ฐ๋์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
PNG:
FAIL components/__tests__/List.js
โ Test suite failed to run
/assets/images/logo-header.png:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){๏ฟฝPNG
^
SyntaxError: Invalid or unexpected token
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
at Object.<anonymous> (components/PageHeader.js:15:19)
at Object.<anonymous> (components/Main.js:10:436)
SVG:
FAIL ui/Button/__tests__/snapshot.test.js
โ fixture 'TextAndIcon' snapshots are rendered correctly
/assets/icons/fontawesome/regular.svg:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
^
SyntaxError: Unexpected token <
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
at Icon (ui/Icon.js:31:17)
at resolve (node_modules/react-dom/cjs/react-dom-server.node.development.js:2599:14)
at ReactDOMServerRenderer.render (node_modules/react-dom/cjs/react-dom-server.node.development.js:2746:22)
at ReactDOMServerRenderer.read (node_modules/react-dom/cjs/react-dom-server.node.development.js:2722:19)
at Object.renderToStaticMarkup (node_modules/react-dom/cjs/react-dom-server.node.development.js:2991:25)
๋ด ํด๋ ๊ตฌ์กฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<rootDir>
assets
*.png, *.svg, ...
components
*.js
ui
*.js
๋ถ๋ช ํ ํ์ผ์ ์กฐ๋กฑ๋์ง ์๊ณ ์ฌ์ ํ ๋ก๋๋์ง๋ง ์ด๊ฒ์ ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋จ์๊ฐ ์์ต๋๋ค.
.babelrc:
{
"presets": [
["es2015", {"modules": false}],
"react",
"stage-1",
["env", {
"targets": {
"browsers": [
"last 3 versions",
"> 1%",
"Firefox ESR",
"iOS 9"
]
}
}]
],
"plugins": [
"react-hot-loader/babel",
"transform-class-properties",
"transform-react-jsx-source",
"glamorous-displayname",
"wildcard"
],
"env": {
"development": {
"plugins": [
["transform-runtime", {
"polyfill": true
}]
]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
ํจํค์ง.json:
"jest": {
"snapshotSerializers": [
"jest-glamor-react",
"enzyme-to-json/serializer"
],
"moduleFileExtensions": ["js"],
"moduleDirectories": ["node_modules"],
"transform": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/config/jest/assetsTransformer.js"
}
},
๋๋ ๋ฐ๋ณด์
๋๋ค. ๋ด ๋ฃจํธ ํด๋์ package.json
์ ์ค์ ์ ๋ฎ์ด์ด ๋ ๋ค๋ฅธ jest.config.js
$ ๊ฐ ์์ต๋๋ค. ์์ง ์คํ๋๊ณ ์์ง๋ ์์ง๋ง ๋ ์ด์ ์ด ํน์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์๋ํฉ๋๋ค. ๋ค์์ ์ค์ํ ์ฌํญ์ ๋๋ค(๋ฐ์ 16๊ณผ ํจ๊ป ํจ์ 3์ผ๋ก ์ธํด ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ตฌ์ฑ์ด ์์์ ์ ์ํ์ญ์์ค).
.babelrc
{
"presets": [
"es2015",
"react",
"stage-1",
"env"
],
"plugins": [
"react-hot-loader/babel",
"transform-class-properties",
"transform-react-jsx-source",
"glamorous-displayname",
"wildcard"
],
"env": {
"development": {
"plugins": [
["transform-runtime", {
"polyfill": true
}]
]
}
}
}
jest.config.js
// this helps: https://github.com/facebook/jest/issues/2081#issuecomment-332406033
module.exports = {
verbose: true,
setupFiles: ['./jest.setup.js'],
snapshotSerializers: ['jest-glamor-react', 'enzyme-to-json/serializer'],
moduleFileExtensions: ['js', 'jsx'],
transform: {
'^.+\\.jsx?$': 'babel-jest',
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
'<rootDir>/config/jest/assetsTransformer.js',
},
};
jest.setup.js
import 'raf/polyfill';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
Enzyme.configure({ adapter: new Adapter() });
๊ทธ๊ฒ์ด ๋๊ตฐ๊ฐ๋ฅผ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
svg
ํ์ผ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. identity-obj-proxy
๋ก ์กฐ๋กฑํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
"moduleNameMapper": {
"\\.(css|scss|svg)$": "identity-obj-proxy"
},
์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๋ ์ฌ๋์ @timgivois ๋ฐฉ์์ด ์ ์๊ฒ ์ ๋ง์ต๋๋ค. ํ์ํ ์ข
์์ฑ์ ์ป์ผ๋ ค๋ฉด npm install --save-dev identity-obj-proxy
๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
"jest": {
"moduleNameMapper": {
".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "identity-obj-proxy"
}
}
@mbaranovski ์ ์๋ฃจ์ ์ด ์๋ํ๋ ๋์ ๊ทธ์ ์๋๊ฐ ๊ทธ๊ฒ์ ๋ณ์๊ธฐ๋ก ์ฌ์ฉํ๋ ค๋ ๊ฒ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ค์ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค(src ์์ฑ์ ์ฃผ์).
<img
alt="ImgName"
height="28"
src={
Object {
"process": [Function],
}
}
width="112"
/>
๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ๋ชจ๋์์ SVG๊ฐ ํ์ํ ์์น๋ก ๋ชจ๋ ๊ฒ์ ๋งคํํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ํด๋น ๋ชจ๋์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
module.exports = {}
์์์ ์ค๋ช ํ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ identity-obj-proxy๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
@magnusart
"jest": {
"moduleNameMapper": {
".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "identity-obj-proxy"
}
}
๊ทธ๊ฒ์ ๋ด ํ๋ฃจ๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ฐ์ฌ ํด์!!.
@mbaranovski ํ ์คํธ๋ฅผ ์ํด jest๋ง ์คํํ์ ๋ ์ ์๋ํ์ต๋๋ค. ์ฌํ๊ฒ๋ create-react-app์์ ๋ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๊ณ ํ ๋
Out of the box, Create React App only supports overriding these Jest options
์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ์ ์ผํ ํด๊ฒฐ์ฑ ์ create-react-app์ ๊บผ๋ด๋ ๊ฒ์ ๋๊น?
CRA๊ฐ ํด๋น ์ต์ ์ ์ง์ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ต์ ์ ๋ซ๊ณ ์ถ์ดํ๋ ์ด์ ๋ฅผ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์๋ง๋ ์ข์ ์ด์ ์ผ ๊ฒ์ ๋๋ค. ๐
/cc @gaearon
๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
npm i --save-dev jest-transform-stub
"jest": {
"transform": {
".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub"
}
}
๋ฐ์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค. assetsTransformer
, identity-obj-proxy
๋ฐ jest-transform-stub
์๋ํ์ต๋๋ค. assetTransformer๋ง ์๋ํฉ๋๋ค.
์๋ ํ์ธ์ @sibinx7 : https://github.com/facebook/jest/issues/2663/#issuecomment -317109798์ ํตํด ํด๋น ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค.
์ฌ๊ธฐ์ ์๋ ๋ชจ๋ ์๋ฃจ์
์ด ์ ์๊ฒ ์ ํฉํ์ง ์์๊ธฐ ๋๋ฌธ์ jest-react-native
ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. react-native-router-flux
-package ์์ ์๋ PNG ํ์ผ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ด ๋ฌธ์ ๊ฐ ๋ค๋ฅธ ๊ฒ์ผ ์ ์์ต๋๋ค.
๋ค์์ ๋ด package.json
ํ์ผ์ ์ผ๋ถ์
๋๋ค.
{
// ...
"devDependencies": {
// ...
"jest": "^23.4.1",
"jest-react-native": "^18.0.0",
},
"jest": {
"preset": "jest-react-native",
"verbose": true,
"modulePathIgnorePatterns": [
"<rootDir>/node_modules/react-native/Libraries/react-native/",
"<rootDir>/node_modules/react-native/packager/"
],
"transformIgnorePatterns": [
"node_modules/(?!((jest-)?react-native|react-clone-referenced-element|react-navigation|react-native-router-flux))"
]
},
// ...
}
์ด ๊ฒฝ์ฐ ๋ณํ ์ต์ ์ ์ฌ์ฉํ์ฌ xml ํ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฝ๊ฐ์ ์์ :
module.exports = {
transform: {
".+.(xml|bpmn)": "<rootDir>/src/__tests__/transformers/xmlTransformer.ts"
},
}
module.exports = {
process() {
return 'module.exports = {};';
},
getCacheKey() {
// The output is always the same.
return 'xmlTransform';
},
};
์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ ๋ฅผ ์ฐธ์กฐํ์ธ์.
http://facebook.github.io/jest/docs/tutorial-webpack.html#content ๋ฅผ ํ์ธํ์ธ์.
์ฃผ์ด์ง ๋งํฌ๊ฐ ๊นจ์ก์ต๋๋ค
@magnusart
"jest": { "moduleNameMapper": { ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "identity-obj-proxy" } }
๊ทธ๊ฒ์ ๋ด ํ๋ฃจ๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ฐ์ฌ ํด์!!.
๋๋ ์ด๊ฒ์์ ์ ํธ๋ฅผ ๋ฐ์ babel-jest
๋ฅผ ์ค์นํ ๋ค์ identity-obj-proxy
๋ฅผ babel-jest
๋ก ๋ฐ๊ฟ๋๋ค.
๋๋ ์ด๊ฒ์ ์ฌ์ฉํ์ญ์์ค https://github.com/eddyerburgh/jest-transform-stub
@eddyerburgh ์ ์๋ฃจ์ ๋ง์ด ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
@magnusart
๋น์ ์ ๋ด ํ๋ฃจ๋ฅผ ์ ์ฅ, ๊ทธ๊ฒ์ ์ ์๋
./node_modules/react-native-gesture-handler/jestSetup.js
๋ฅผ setupFiles
์ ์ถ๊ฐํ ํ ์ด png ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค( react-native-gesture-handler
๋ก ๋๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ์๋์์ต๋๋ค).
๋๋ https://github.com/facebook/jest/issues/2663#issuecomment -341384494 ( @magnusart using identity-obj-proxy
)๋ฅผ ์๋ํ์ง๋ง ์ด๋ค ์ด์ ๋ก๋ enzyme
๋ฅผ ๊นจ๋จ๋ ธ์ต๋๋ค( enzyme
์ mock
๋ฅผ ํจ์๊ฐ ์๋ ๊ธฐํธ๋ก ์ฌ์ฉ). ๊ทธ๋ฐ ๋ค์ https://github.com/facebook/jest/issues/2663#issuecomment -369040789 (@eddyerburgh
jest-transform-stub
)๋ฅผ ์ฌ์ฉํ์ง๋ง ์๋ฌด ๊ฒ๋ ํ์ง ์์์ต๋๋ค.
๊ฒฐ๊ตญ, ๋๋ https://github.com/facebook/jest/issues/2663#issuecomment -274270387 ( @cpojer ์ฒ์ ์ webpack
์๋ฃจ์
)์ ์๋ํ๊ณ ๊ทธ๊ฒ์ด ๋๋ฅผ ์ํด ์ผํ๋ ์ ์ผํ ๊ฒ์ด์์ต๋๋ค.
๋๊ตฌ๋ ์ง SVG์์ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์๋ง๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ ๊ฒ์ ๋๋ค. https://www.npmjs.com/package/jest-svg-transformer
๋ด jest.config.ts
ํ์ผ์๋ง ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
transform: {
'^.+\\.tsx?$': 'babel-jest',
'^.+\\.svg$': 'jest-svg-transformer',
},
๊ทธ๋ฆฌ๊ณ ์ด ํ์ผ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ๋ฌ๋ถ์ moduleNameMapper๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ์ ๊ฐ babel๊ณผ ํจ๊ป ์ฌ์ฉ์ ์ง์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๊ฐ์ ์ค๋ฅ๊ฐ ์์๊ณ assetsTransformer.js ๋ฅผ ๋ง๋ค์ด ํด๊ฒฐํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ package.json์ jest ๊ตฌ์ฑ์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.
"jest": { "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/assetsTransformer.js", "\\.(css|less)$": "<rootDir>/assetsTransformer.js" } },
์ถ์ฒ: https://facebook.github.io/jest/docs/webpack.html#content