рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдХреАрдбрд╝рд╛
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдпрджрд┐ app.jsx
рдореЗрдВ import './app.css';
рд╣реИ рддреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:
yarn run:test v0.21.3
$ NODE_ENV=client jest -u
FAIL src/__tests__/app.test.js
тЧП Test suite failed to run
/home/svipben/Documents/react-boilerplate/src/client/app/app.css:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){body {
^
SyntaxError: Unexpected token {
at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)
at Object.<anonymous> (src/client/app/app.jsx:7:1)
at Object.<anonymous> (src/__tests__/app.test.js:2:12)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 0.693s
Ran all test suites.
error Command failed with exit code 1.
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП...
рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рд╕рдЯреАрдХ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдЬреЗрд╕реНрдЯ, рдиреЛрдб, рдпрд╛рд░реНрди/рдПрдирдкреАрдПрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред
рдУрдПрд╕: рд▓рд┐рдирдХреНрд╕ рдЙрдмрдВрдЯреВ 16.04
рдЬреЗрд╕реНрдЯ: рдирд╡реАрдирддрдо
рдпрд╛рд░реНрди: рдирд╡реАрдирддрдо
рдиреЛрдб: рдирд╡реАрдирддрдо
babel-jest
: рдирд╡реАрдирддрдо
.рдмреЗрдмреЗрд▓рдЖрд░рд╕реА:
"client": {
"presets": [
"latest", // All you need to compile what's in ES2015+
"flow", // Flow support
"react", // Strip flow types and transform JSX
"stage-2" // Experimental syntax extensions
],
"sourceMaps": true // Compile with Source Maps
},
рдордЬрд╝рд╛рдХ: NODE_ENV=рдХреНрд▓рд╛рдЗрдВрдЯ рдордЬрд╝рд╛рдХ -u
рдкреАрдПрд╕ рдЕрдЧрд░ рдореИрдВ import './app.css';
рдЯрд┐рдкреНрдкрдгреА/рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓рддрд╛ рд╣реИ
@svipben https://facebook.github.io/jest/docs/webpack.html#mocking -css-modules
@maximderbin рдзрдиреНрдпрд╡рд╛рдж!
@maximderbin рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ moduleNameMapper
. рдЬреЛрдбрд╝рдХрд░ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ
@svipben @maximderbin @simonxl рдореБрдЭреЗ рдпрд╣ рдореЙрдбреНрдпреВрд▓рдирд╛рдордореИрдкрд░ рдХрд╣рд╛рдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ?
рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ packag.json рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рд▓реЗрдХрд┐рди рдХреМрди рд╕рд╛?
рдЯреАрдПрдирдПрдХреНрд╕
@sarahmarciano moduleNameMapper
рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЖрдк "jest" рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд package.json (рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ) рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
{
"dependencies": {...}
"jest": {
"moduleNameMapper": {...}
}
}
рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ moduleNameMapper
рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛редjson рдлрд╝рд╛рдЗрд▓
{
"jest":{
"moduleNameMapper":{
"\\.(css|less|sass|scss)$": "<rootDir>/__mocks__/styleMock.js",
"\\.(gif|ttf|eot|svg)$": "<rootDir>/__mocks__/fileMock.js"
}
}
}
рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдиреАрдЪреЗ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА
__mocks__/styleMock.js
module.exports = {};
__mocks__/fileMock.js
module.exports = 'test-file-stub';
рдпрджрд┐ рдЖрдк CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреНрд▓рд╛рд╕рдирд╛рдо рд▓реБрдХрдЕрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рдЬрд╛рдПрдЧреА:
{
"jest":{
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"\\.(css|less|scss|sass)$": "identity-obj-proxy"
},
}
}
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ identity-obj-proxy
рдкреИрдХреЗрдЬ рдХреЛ рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
yarn add identity-obj-proxy -D
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдПред рдЖрдк рдЬреЗрд╕реНрдЯ рдбреЙрдХреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЖрдкрдХреА рдЬреЗрдПрд╕рдПрдХреНрд╕ рдлрд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ рддреЛ рдпрд╣рд╛рдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдПрдБ рдорд╛рдирддреА рд╣реИрдВ рдХрд┐ рдЖрдк рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХрд╛рд╢ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдареАрдХ рд╕реЗ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд╣реЛрддрд╛ред
@ рдореИрдереНрдпреВ-рдбреАрди рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ "рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдареАрдХ рд╕реЗ рдордЬрд╛рдХ рдХрд░рдирд╛"? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ identity-obj-proxy
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рд╣реИ
:export {
sizeMobile: $size-mobile / 1px;
sizePhablet: $size-phablet / 1px;
sizeSmallTablet: $size-small-tablet / 1px;
sizeTablet: $size-tablet / 1px;
sizeDesktop: $size-desktop / 1px;
sizeLargeDesktop: $size-large-desktop / 1px;
}
import styles from './variables.scss'
const tileSize = parseFloat(styles.sizeTablet) / 3
//...
render() {
return <Tile style={{width: tileSize}} />
}
рдпрд╣ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдмрд╕ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЬреЗрдПрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рд░рд╛рдВрдХ (рдорд╛рди) рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд┐ рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдкрд╛рджрди рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди identity-obj-proxy
рдХреЗ рд╕рд╛рде, рдЗрди рдорд╛рдиреЛрдВ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рдореМрдЬреВрдж рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ JSX рдХреЛрдб рд╣реИ рдЬреЛ рдЖрдкрдХреЗ CSS рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдареАрдХ рд╕реЗ рдордЬрд╛рдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╣реИрдВ)ред identity-obj-proxy
рдХреЗрд╡рд▓ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреЛрдкреНрдб рд╕реАрдПрд╕рдПрд╕ рдХреНрд▓рд╛рд╕рдирд╛рдо рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рджреВрд╕рд░реЗ рдкрд╣рд▓реВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓реНрдпреЛрдВ / рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЬреЗрдПрд╕ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@ рд╕рд┐рдореЗрдирдмреА
рд╕рдВрдпреЛрдЧ рд╕реЗ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирдХрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:
const styles = require('styles/variables.scss')
jest.mock('styles/variables.scss', () => {
return {
sizePhablet: 500,
sizeSmallTablet: 768,
sizeTablet: 1024,
sizeDesktop: 1440,
sizeLargeDesktop: 1920
}
})
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░, рдореЗрд░реА рддрд░рд╣, рдЕрдкрдиреЗ рдмрд╛рд▓реЛрдВ рдХреЛ рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ "рдмрд╕ identity-obj-proxy
" рд╕рд▓рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореИрдВрдиреЗ 'рдЬреЗрд╕реНрдЯ-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд╕реАрдПрд╕рдПрд╕' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
"transform": {
"^.+\\.js$": "babel-jest",
".+\\.(css|styl|less|sass|scss)$": "jest-transform-css"
}
рдЕрдм css рдлрд╛рдЗрд▓реЗрдВ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдЬреИрд╕реЗ JS рдлрд╛рдЗрд▓реЗрдВ рдХрд░рддреА рдереАрдВред
@ рдореИрдереНрдпреВ-рдбреАрди рдЖрдкрдиреЗ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирдХрд▓реА рдХрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ?
рдореИрдВ рдПрдХ рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:
<strong i="6">@import</strong> "progress-tracker/progress-tracker-variables.scss";
рдЬрдм рднреА рдореИрдВ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ
рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ css рдореЙрдХрдЕрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИредjson
рдореИрдВ рдЙрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдорджрдж рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред рдХреЛрдИ рддрд░рдХреАрдм, рд╕реБрдЭрд╛рд╡?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдмреИрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рдФрд░ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА-рдУрдмреАрдЬреЗ-рдкреНрд░реЙрдХреНрд╕реА рдкреИрдХреЗрдЬ рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 2: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВрдиреЗ рд╡реЗрдм рдкрд░ рдЖрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред
рдореИрдВ рдмреИрдмреЗрд▓ 7
, рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ ^24.5.0
, рдЬреЗрд╕реНрдЯ ^24.1.0
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЙрдкрд░реЛрдХреНрдд рд╕рд▓рд╛рд╣ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рднреА рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрдм рдореИрдВ рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ (рдЬреИрд╕реЗ $#$5) рдХреЛ рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ (рдЬреИрд╕реЗ Post.test.js
) рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ import
рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Post.js
) рдПрдХ CSS рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ - рдЬреИрд╕реЗ ./postStyles.css
ред
Jest encountered an unexpected token
SyntaxError: Unexpected token .
Details:
/Users/ben/Desktop/Work/code/bengrunfeld/src/front-end/components/Post/postStyles.css:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){.post h1, .post h2, .post h3 {
3 |
4 | import { PostText } from './styles'
> 5 | import './postStyles.css'
рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдореЗрд░реЗ package.json
рдореЗрдВ рд╣реИ:
"jest": {
"moduleFileExtensions": ["js", "jsx"],
"moduleDirectories": ["node_modules", "bower_components", "shared"],
"moduleNameMapper": {
"\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js",
"\\.(gif|ttf|eot|svg)$": "<rootDir>/__mocks__/fileMock.js",
"^react(.*)$": "<rootDir>/vendor/react-master$1",
"^config$": "<rootDir>/configs/app-config.js"
}
},
рдФрд░ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ __mocks__/styleMock.js
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рд╣реИ:
module.exports = {};
рдЕрдВрдд рдореЗрдВ, рдореЗрд░рд╛ jest.config.js
:
module.exports = {
setupFiles: ['<rootDir>/src/test/setup.js']
}
рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдПрдВрдЬрд╛рдЗрдо рдХреЛ рд╡рд┐рдиреНрдпрд╕реНрдд рдХрд░рддрд╛ рд╣реИ:
import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
Enzyme.configure({ adapter: new Adapter() })
рдореИрдВ рд▓рдЧрднрдЧ рдЙрд╕реА рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореЗрд░реА рдПрд╕рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ @import рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИрдВред рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдмрддрд╛рдиреЗ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓: рдЕрдорд╛рдиреНрдп рдпрд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЛрдХрдиред рдХреГрдкрдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рдореЗрд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдореИрдВрдиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдореИрдВ рдПрдХ рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ @babel/polyfill
рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛
рд╡рд╣реА рдпрд╣рд╛рдБ @ fthomas82
рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ
moduleNameMapper
рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛редjson рдлрд╝рд╛рдЗрд▓{ "jest":{ "moduleNameMapper":{ "\\.(css|less|sass|scss)$": "<rootDir>/__mocks__/styleMock.js", "\\.(gif|ttf|eot|svg)$": "<rootDir>/__mocks__/fileMock.js" } } }
рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдиреАрдЪреЗ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА
__mocks__/styleMock.js
module.exports = {};
__mocks__/fileMock.js
module.exports = 'test-file-stub';
рдпрджрд┐ рдЖрдк CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреНрд▓рд╛рд╕рдирд╛рдо рд▓реБрдХрдЕрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рдЬрд╛рдПрдЧреА:{ "jest":{ "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js", "\\.(css|less|scss|sass)$": "identity-obj-proxy" }, } }
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ
identity-obj-proxy
рдкреИрдХреЗрдЬ рдХреЛ рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАyarn add identity-obj-proxy -D
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдПред рдЖрдк рдЬреЗрд╕реНрдЯ рдбреЙрдХреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж!!!
рдореИрдВрдиреЗ 'рдЬреЗрд╕реНрдЯ-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд╕реАрдПрд╕рдПрд╕' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред"transform": { "^.+\\.js$": "babel-jest", ".+\\.(css|styl|less|sass|scss)$": "jest-transform-css" }
рдЕрдм css рдлрд╛рдЗрд▓реЗрдВ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдЬреИрд╕реЗ JS рдлрд╛рдЗрд▓реЗрдВ рдХрд░рддреА рдереАрдВред
рдзрдиреНрдпрд╡рд╛рдж, рднрд╛рдИ @krajasekhar
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдлрд▓рддрд╛ рдХреЗ packages.json
рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рд╛, рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ jest.config.js
рдерд╛, рдЬреЗрд╕реНрдЯ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ packages.json
рд╕реЗ рдЕрдзрд┐рдХ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдореЗрд░реА jest.config.js
рдлрд╝рд╛рдЗрд▓ рд╣реИ:
module.exports = {
setupFilesAfterEnv: ['<rootDir>/.setup-tests.js'],
testPathIgnorePatterns: ['<rootDir>/.next/', '<rootDir>/node_modules/'],
transform: {
'^.+\\.js$': 'babel-jest',
'.+\\.(css|styl|less|sass|scss)$': 'jest-transform-css',
},
};
рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдХрдЪреНрдЪрд╛ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ
import "./cloud.css?raw"
рдореИрдВрдиреЗ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ
"jest":{
"moduleNameMapper": {
"\\.(css|less|scss|sass|css?raw)$": "identity-obj-proxy"
},
рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдЖрдпрд╛рдд рд▓рд╛рдЗрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдХрдЪреНрдЪреЗ рдЖрдпрд╛рдд рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
@import рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЛрдХрди рдХрд╛ рд╕рдорд╛рдзрд╛рди = :)
рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗ:
npm i --save-dev identity-obj-proxy
Jest.config.js . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
module.exports = {
"moduleNameMapper": {
"\\.(css|less|scss)$": "identity-obj-proxy"
}
}
рдЕрдЧрд░ рдХреЛрдИ рдпрд╣рд╛рдБ рдЖрддрд╛ рд╣реИ:
рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╕рдмрд╕реЗ рдЕрджреНрдпрддрди рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ: https://www.npmjs.com/package/jest-css-modules-transform
transform: {
'^.+\\.(js|jsx|ts|tsx)$': '<rootDir>/node_modules/babel-jest',
".+\\.(css|styl|less|sass|scss)$": "jest-css-modules-transform"
},
transformIgnorePatterns: [
'/node_modules/',
'^.+\\.module\\.(css|sass|scss)$',
],
moduleNameMapper: {
'^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy'
},
рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдлрд▓рддрд╛ рдХреЗ
packages.json
рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рд╛, рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВjest.config.js
рдерд╛, рдЬреЗрд╕реНрдЯ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧpackages.json
рд╕реЗ рдЕрдзрд┐рдХ рдХрд░рддрд╛ рд╣реИредрдпрд╣рд╛рдБ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдореЗрд░реА
jest.config.js
рдлрд╝рд╛рдЗрд▓ рд╣реИ:module.exports = { setupFilesAfterEnv: ['<rootDir>/.setup-tests.js'], testPathIgnorePatterns: ['<rootDir>/.next/', '<rootDir>/node_modules/'], transform: { '^.+\\.js$': 'babel-jest', '.+\\.(css|styl|less|sass|scss)$': 'jest-transform-css', }, };
рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ @Shadoow! рдпрд╣ рдПрдХ рддрд░рд╣ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдмрд╛рдд рдереА рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рдерд╛ рдХрд┐ ... рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ package.json . рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рд░рд╣рд╛, рд╡рд╣ рд╣рдорд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдбреНрд░реАрдо рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдХрдИ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдШ рдерд╛:
1) рдПрдХ jest.config.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
touch jest.config.json
open jest.config.json
2) рдЬреЗрд╕реНрдЯ-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд╕реАрдПрд╕рдПрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
yarn add jest-transform-css -D
3) рдЖрдкрдХреА рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:
module.exports = {
preset: 'ts-jest/presets/js-with-babel',
moduleNameMapper: {
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2)$': './jest.mock.js',
},
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/assets/'],
transform: {
'^.+\\.jsx?$': 'babel-jest',
'\\.(css|less|scss|sass)$': 'jest-transform-css',
},
};
4) рдЕрдкрдиреЗ package.json рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ рд╕рднреА рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╣реИ, рддреЛ рдирдИ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ), рддреЛ рдЬрд╛рджреВ рдпрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИ:
"test": "jest --config ./jest.config.js"
рд╣рд░ рдХреЛрдИ!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ
moduleNameMapper
рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛редjson рдлрд╝рд╛рдЗрд▓рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдиреАрдЪреЗ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА
__mocks__/styleMock.js
__mocks__/fileMock.js
рдпрджрд┐ рдЖрдк CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреНрд▓рд╛рд╕рдирд╛рдо рд▓реБрдХрдЕрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рдЬрд╛рдПрдЧреА:
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ
identity-obj-proxy
рдкреИрдХреЗрдЬ рдХреЛ рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАрдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдПред рдЖрдк рдЬреЗрд╕реНрдЯ рдбреЙрдХреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ