рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЛ
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореИрдВ рдЕрднреА рдЕрдкрдиреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрди рд╕рднреА рдореЗрдВ рдЖрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рдкрд╛рдпрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдореЗрд░реЗ рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди рдореЗрдВ рдмреЗрдмреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ 'рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЛрдХрди рдЖрдпрд╛рдд' рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ рддрдХ, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рдореИрдВ рдПрдХ .babelrc рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЧреБрдЬрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкрд░реАрдХреНрд╖рдг, рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рд╣реА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рдЖрдпрд╛рдд рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдЪрд┐рддреНрд░ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рджрд░реНрдЬрди рдЙрддреНрддреАрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рд╕рднреА ES6 рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред .babelrc рдХреЗ рдмрд┐рдирд╛ рд╕рднреА 14 рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЧрд┐рдЯрд╣рдм рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рднрдВрдбрд╛рд░ рд╣реИ рдХрд┐ рд╣рдо npm install
рдФрд░ npm test
ред
рдЗрд╕реЗ рдореЗрд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ npm run setup
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдФрд░ npm run test
рдЪрд▓рд╛рдХрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрдм рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдЬреЗрд╕реНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ --debug
рд╕рд╛рде рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
jest version = 16.0.2
test framework = jasmine2
config = {
"scriptPreprocessor": "/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate/config/testing/preprocessor.js",
"moduleFileExtensions": [
"js",
"jsx",
"json"
],
"moduleDirectories": [
"node_modules",
"bower_components",
"shared"
],
"rootDir": "/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate",
"name": "-Users-myMac-Developer-works-in-progress-open-source-maintaining-scalable-react-boilerplate",
"setupFiles": [],
"testRunner": "/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate/node_modules/jest-jasmine2/build/index.js",
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/nq/7kdqy15d3m399326f7wtb_6w0000gn/T/jest",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"globals": {},
"haste": {
"providesModuleNodeModules": []
},
"mocksPattern": "__mocks__",
"moduleNameMapper": {},
"modulePathIgnorePatterns": [],
"noStackTrace": false,
"notify": false,
"preset": null,
"preprocessorIgnorePatterns": [
"/node_modules/"
],
"resetModules": false,
"testEnvironment": "jest-environment-jsdom",
"testPathDirs": [
"/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
"testURL": "about:blank",
"timers": "real",
"useStderr": false,
"verbose": null,
"watch": false,
"cache": true,
"watchman": true,
"testcheckOptions": {
"times": 100,
"maxSize": 200
}
}
рдореЗрд░реЗ рдкрд╛рд╕ рд░рд┐рдПрдХреНрдЯ-рдиреЗрдЯрд┐рд╡ рдФрд░ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ,
рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА init AwesomeProject
рд╕реАрдбреА рд╡рд┐рд╕реНрдордпрдХрд╛рд░реАрдкрд░рд┐рдпреЛрдЬрдирд╛
рдлрд┐рд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬреИрд╕реЗ npm рджреЗрд╢реА-рдЖрдзрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ --save
рджреЗрд╢реА-рдЖрдзрд╛рд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЛ рдЕрдкрдиреА index.ios.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
npm рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛:
../test/node_modules/native-base/index.js:4
'./Components/vendor/react-native-drawer' рд╕реЗ рджрд░рд╛рдЬ рдЖрдпрд╛рдд рдХрд░реЗрдВ;
^^^^^^
рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐: рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЛрдХрди рдЖрдпрд╛рдд
рджреЗрдЦреЗрдВ http://facebook.github.io/jest/docs/tutorial-react-native.html#transformignorepatterns -customization
рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ @cpojer рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдирдорд╕реНрддреЗ! 'transformIgnorePatterns' рдХрд░рддрд╛ рд╣реИ....mmmm...рдХрд┐ рдЗрд╕реЗ рдЕрд╡рд╢реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛)
рд▓реЗрдХрд┐рди рдореИрдВ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рд╕реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЙрд╕ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЗрд╕ рд╕рд╣рд╛рд░рд╛ рдиреЗ рдореЗрд░реА рдорджрдж рдХреА :)
{
"jest": {
"verbose": true,
"moduleDirectories": ["node_modules", "src"]
},
}
UPD1
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрд░реА рдЬреЗрд╕реНрдЯ config рд╣реИ:
"jest": {
"verbose": true,
"transform": {
"^.+\\.js$": "babel-jest",
"^.+\\.(css|scss|less)$": "jest-css-modules"
},
"globals": {
"NODE_ENV": "test"
},
"moduleFileExtensions": [
"js",
"jsx"
],
"moduleDirectories": [
"node_modules",
"src/frontend",
"src/shared"
]
},
... рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ :)
рд╕рд╛рджрд░, рдкрд╛рд╡реЗрд▓ рдЯреНрд░реАрдЯреАрдХреЛрд╡
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╕рдорд╕реНрдпрд╛ рд╣рдореЗрд╢рд╛ jest --no-cache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХреА рдЬрд╛рддреА рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХреЗ рдмрд┐рдирд╛ рдХреИрд╢реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЗрд╕реНрдЯ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
рдореИрдВ рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ред ES6 рдЖрдпрд╛рдд рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╣рдореЗрд╢рд╛ "рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рдЖрдпрд╛рдд" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЙрди рд╕рднреА рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдиреЛ-рдХреИрд╢ рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ (рдЙрдиреНрд╣реЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!)
рдореИрдВ рд╣рд╛рд░ рдорд╛рдирддрд╛ рд╣реВрдВред рдХреЛрдИ рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИ
рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИ
рдЖрдк рд╕рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ ES рдореЙрдбреНрдпреВрд▓ рдиреЛрдб рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди (рд╡реЗрдмрдкреИрдХ, рд░реЛрд▓рдЕрдк) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмреЗрдмрд▓рдЖрд░рд╕реА рдореЗрдВ "рдкрд░реАрдХреНрд╖рдг" рдПрдирд╡реА рдХреЗ рд▓рд┐рдП рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЙрдордирдЬреЗрдПрд╕ рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреЗрдЦреЗрдВ https://babeljs.io/docs/usage/babelrc/#env -option рдФрд░ https://babeljs.io/docs/ рдкреНрд▓рдЧрдЗрдиреНрд╕/рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рдПрд╕2015-рдореЙрдбреНрдпреВрд▓-рдХреЙрдордирдЬ/
{
"env": {
"production": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, cpojer. рдХрд▓ рдореИрдВрдиреЗ рдЕрдкрдиреА рдиреЛрдб рдПрдирд╡реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЛрдб рдПрдирд╡реА рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрд╕реНрдЯ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдиреЛрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВред рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдиреЛрдб-рдПрдирд╡реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдереАред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред @cpojer рдХрд╛ рдлрд┐рдХреНрд╕ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред
@cpojer рдХреЗ рдлрд┐рдХреНрд╕ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рдлреА рд╕рд░рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА рдРрдк рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
npm test
рдпрд╛ jest
рдЪрд▓рд╛рддреЗ рд╕рдордп рдпрд╣ 'SyntaxError: Unexpected token import'
.рдмреЗрдмреЗрд▓рдЖрд░рд╕реА
{
"presets": ["react-native"]
}
.рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди
{
"name": "BeeAppy",
"version": "0.1.0",
"private": true,
"devDependencies": {
"babel-jest": "^20.0.3",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-react-native": "^2.0.0",
"enzyme": "^2.8.2",
"eslint": "^4.0.0",
"eslint-plugin-react": "^7.1.0",
"jest": "^20.0.4",
"react-addons-test-utils": "^15.6.0",
"react-dom": "^15.6.1",
"react-test-renderer": "^16.0.0-alpha.6"
},
"scripts": {
"start": "react-native start",
"android": "react-native run-android",
"ios": "react-native run-ios",
"test": "node node_modules/jest/bin/jest.js --watch"
},
"jest": {
"preset": "react-native"
},
"dependencies": {
"react": "16.0.0-alpha.6",
"react-native": "^0.44.0",
"react-navigation": "^1.0.0-beta.11"
}
}
рдХреНрдпрд╛ @cpojer рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ env рд╕реНрдирд┐рдкреЗрдЯ
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ!
рдХреЛрдИ рднреА рд╕рд╣рд╛рдпрддрд╛ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧреА, рдзрдиреНрдпрд╡рд╛рдж
@JessicaBarclay рдЗрд╕реЗ рдЖрдкрдХреЗ .babelrc рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХрджрд░:
"env": {
"development": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
рдЖрд╣ рдзрдиреНрдпрд╡рд╛рдж @rlage ! рдХреНрд░рдордмрджреНрдз :)
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ .babelrc
рдХреЛ рд╕рд╣реА presets
рдФрд░ plugins
рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ NODE_ENV=test
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред package.json
ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, "рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рдЖрдпрд╛рдд" рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓:
"scripts": {
...
"test": "jest",
}
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж:
"scripts": {
...
"test": "NODE_ENV=test jest",
}
@jlyman
рдЬреЗрд╕реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрд╕реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NODE_ENV рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ Babel рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ Babel рдХреЗ env рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ Jest рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ NODE_ENV рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛ред рдЬрдм рдХреЛрдИ NODE_ENV рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмреИрдмреЗрд▓ рдЬреИрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдЦрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрд╣ .babelrc рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
{"env": {
"development": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}}
рдиреЛрдЯ: рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬрд┐рдпрд╛рдБ рджреЛрдиреЛрдВ рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред
рддрдм рдореИрдВ рдмрд╕ рдлреЛрди рдХрд░рддрд╛ рд╣реВрдВ:
node_modules/.bin/jest
рдпрд╛ package.json рдХреЗ рд╕рд╛рде:
{"scripts": {"test": "jest"}}
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП NODE_ENV рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
@laszbalo рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЙрд╕ рджреВрд╕рд░реЗ env
рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЪрд╛рд▓ рдЪрд▓ рд░рд╣реА рд╣реИред рдЕрдЧрд░ рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕реНрдкрд╖реНрдЯ NODE_ENV
рдЙрдкрд╕рд░реНрдЧ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдбреЙрдХреНрд╕ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рднреА рдкрдврд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред
@jlyman рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХреМрди рд╕рд╛ рд╕рдорд╛рдзрд╛рди?
@doudounannan рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рд╡рд╣реА рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ ред рдЬреИрд╕реЗ @laszbalo рдиреЗ рдХрд╣рд╛, рдпрд╣ рдбреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ Babel рдХреЗ рддрд╣рдд рдХрд╣рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ @laszbalo рдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╛ NODE_ENV test
рдореЗрд░рд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред
рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдЬрдм рдореИрдВ "transformIgnorePatterns": [ ]
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдмреЗрдмреЗрд▓ рдореЗрд░реА рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ transformIgnorePatterns
рд╡рд┐рдХрд▓реНрдк рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдмреЗрдмреЗрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ... рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ .babelrc рд╣реИ (рдореИрдВ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдордЬрд╝рд╛рдХ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ):
{
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ https://github.com/facebook/jest/issues/2550#issuecomment -290812720 рд╕реЗ рдорд┐рд▓рд╛ рдХреНрдпреЛрдВрдХрд┐ #770 рдореЗрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдпрд╛ рдпрд╣рд╛рдБ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣рд╛ рдерд╛ ...
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
/.../node_modules/@expo/react-native-action-sheet/ActionSheet.ios.js:3
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/ScriptTransformer.js:289:17)
at Object.<anonymous> (node_modules/@expo/react-native-action-sheet/index.js:1:107)
at Object.<anonymous> (node_modules/react-native-gifted-chat/src/GiftedChat.js:10:29)
{
"env": {
"production": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"development": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
},
"presets": [
"react-native"
],
"plugins": [
["module-resolver", {
"cwd": "babelrc",
}]
]
}
"jest": {
"preset": "react-native",
"setupFiles": [
"./__tests__/setup.js"
],
"testRegex": "/__tests__/.*\\.spec\\.js$"
}
рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рд╛:
"jest": {
"preset": "react-native",
"transformIgnorePatterns": [
"node_modules/(?!react-native|react-navigation)/"
]
}
рдФрд░ рдЕрдм рдЬрдм рдореИрдВ рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
ReferenceError: рдЕрдЬреНрдЮрд╛рдд рдкреНрд▓рдЧрдЗрди "рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд░рд┐рдкреНрд▓реЗрд╕-рдСрдмреНрдЬреЗрдХреНрдЯ-рдЕрд╕рд╛рдЗрди" рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ "/Users/caalcaz/Documents/Projects/Enterprise-app/node_modules/enzyme/.babelrc" 0 рдкрд░, "/Users/caalcaz/ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝/рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ/рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝-рдРрдк/рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕/рдПрдВрдЬрд╛рдЗрдо"
@calcazar рдЖрдкрдХреЗ node_modules/enzyme/.babelrc рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?
рдореИрдВрдиреЗ рдЗрд╕реЗ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ _рдФрд░_ рдЯреАрдПрд╕-рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ред рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди рдореЗрдВ:
"jest": {
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"globals": {
"NODE_ENV": "test"
},
"verbose": true,
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json"
],
"transform": {
"^.+\\.jsx?$": "babel-jest",
"^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"transformIgnorePatterns": ["/node_modules/(?!lodash-es)"], // <-- this allows babel to load only the node modules I need (which is lodash-es) and ignore the rest
"testRegex": "test/.*\\.spec\\.ts$",
"setupFiles": [
"<rootDir>/test/jest-pretest.ts"
],
"testEnvironment": "node",
"moduleNameMapper": {
"aurelia-(.*)": "<rootDir>/node_modules/$1"
},
// some coverage and results processing options
},
рдлрд┐рд░ .babelrc рдореЗрдВ (рдЬрд┐рд╕реЗ рдореИрдВ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
{
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ! (рдпрд╣ рдПрдХ рдСрд░реЗрд▓рд┐рдпрд╛ рдРрдк рдХреЗ рд▓рд┐рдП рд╣реИ рдЗрд╕рд▓рд┐рдП YMMV)
@ ThinkOfaNumber
рдореИрдВ рдпрд╣реА рджреЗрдЦрддрд╛ рд╣реВрдВред рдПрдХ FYI рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ Enzyme V3.0 . рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ
{
"presets": ["airbnb"],
"plugins": [
["transform-replace-object-assign", "object.assign"],
],
}
@thinkOfaNumber рдЕрдкрдирд╛ рд╕реБрдЭрд╛рд╡ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдХрд┐ рдЬреЗрд╕реНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ es6 рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдХреБрдВрдЬреА рдпрд╣рд╛рдБ рд╣реИ
"jest": {
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"transformIgnorePatterns": ["/node_modules/(?!lodash-es)"], // <-- this allows babel to load only the node modules I need (which is lodash-es) and ignore the rest
рдпрд╣ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!
@rochapablo рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ред рдХреЛрдЗ рднрд╛рдЧреНрдп?
рдирд╣реАрдВ, рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рддред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рддрдХ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред
рдЕрдиреБрд╕рд░рдг рднреА
@rochapablo рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИ?
рдореИрдВ рдЙрд╕ рдШрдЯрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд┐рд╕рдореЗрдВ GiftedChat
рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ ...
@todorone , рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
"transformIgnorePatterns": [
"node_modules/(?!react-native-gifted-chat)/"
]
@rochapablo рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред рдореИрдВрдиреЗ transformIgnorePatterns
рд░реЗрдЧреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдЦреЗрд▓рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖред
"transform": {
"^.+\\.js$": "babel-jest",
"^.+\\.jsx?$": "babel-jest"
},
рдЙрдкрд░реЛрдХреНрдд рдХреЛ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
@rochapablo рдХреНрдпрд╛ рдЖрдкрдиреЗ jest-expo
рдкреНрд░реАрд╕реЗрдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдХреЛрдЗ рднрд╛рдЧреНрдп? рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ & transformIgnorePatterns
рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рд╛рдирдд рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
@testacode рдЬреЛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ import
, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рд╛ рд╣реИ? https://facebook.github.io/jest/docs/en/webpack.html#using -with-webpack-2 рдХреЗ рдиреАрдЪреЗ рджреЗрдЦреЗрдВ
@SimenB рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣реА рдореИрдВ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛!
рдпрд╣ рд░реЛрдЪрдХ рд╣реИред рдХреБрдЫ рд╣рд╛рд▓рд┐рдпрд╛ рдЕрдкрдбреЗрдЯ рдиреЗ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЬреЛрдбрд╝ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рддреЛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
npm install babel-jest --save-dev
рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕реЗ рдЕрдм рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...
рдореИрдВрдиреЗ рдмрд╕ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛:
npm i babel-jest
рд╕рд╛рде рд╣реА, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде .babelrc
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рди рднреВрд▓реЗрдВ:
{
"presets": ["env", "react"]
}
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
.babelrc
:
{
"presets": ["env", "stage-3"],
"plugins": ["transform-class-properties"]
}
package.json
:
"scripts": {
"test": "jest --forceExit"
},
"devDependencies": {
"babel-core": "^6.11.4",
"babel-jest": "^21.2.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-3": "^6.24.1",
"jest": "^21.2.0"
}
@hqro рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж
рдореЗрд░реЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдореЗрд░реА .babelrc
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдерд╛:
{
"presets": ["react", ["env", { "modules": false }]],
"plugins": [ ... ]
}
рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ "рдкрд░реАрдХреНрд╖рдг" рдкрд░реНрдпрд╛рд╡рд░рдг рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
{
"presets": ["react", ["env", { "modules": false }]],
"plugins": [ ... ],
"env": {
"test": {
"presets": ["react", "env"],
}
}
}
@nemoDreamer рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдкреНрд░реАрд╕реЗрдЯ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ
{
"presets": ["react", ["env", { "modules": false }]],
"plugins": [ ... ],
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"],
}
}
}
рдореИрдВ рдЬреЛ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИред
> cross-env NODE_ENV=test jest --no-cache
FAIL src\views\Pay\__tests__\Pay.test.js
тЧП Test suite failed to run
C:\Users\***\Documents\Project\***\node_modules\ne-rc\lib\index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import _Alert from './Alert';
^^^^^^
SyntaxError: Unexpected token import
11 | * <strong i="6">@param</strong> {Array<Object>} [data] цпПф╕АчзНхИЖцЬЯчЪДшпжч╗Жф┐бцБп data=[{},{}...]
12 | * <strong i="7">@param</strong> {Number} [defaultSelected] щ╗ШшодщАЙф╕нчЪДф╕ЛцаЗ
> 13 | * <strong i="8">@param</strong> {Funtion} [onClick] чВ╣хЗ╗шзжхПСф║Лф╗╢
14 | * <strong i="9">@param</strong> {Number} [columnNum] ф╕АшбМцЬЙхдЪх░СхИЧ
15 | *
16 | * <strong i="10">@example</strong>
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:316:17)
at Object.<anonymous> (src/components/Installment/Installment.jsx:13:13)
at Object.<anonymous> (src/components/Installment/index.js:8:20)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 3.693s
рдпрд╣рд╛рдВ рдореЗрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВред
* .рдмреЗрдмреЗрд▓рдЖрд░рд╕реА *
{
"presets": [
[
"env",
{
"modules": false
}
],
// webpack understands the native import syntax, and uses it for tree shaking
"es2015",
"stage-2",
// Specifies what level of language features to doPay.
// Stage 2 is "draft", 4 is finished, 0 is strawman.
// See https://tc39.github.io/process-document/
"react"
// Transpile React components to JavaScript
],
"env": {
"test": {
"presets": ["env", "react", "stage-2"],
"plugins": [
"transform-es2015-modules-commonjs"
]
}
}
}
рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди
{
"main": "index.js",
"scripts": {
"dev": "cross-env NODE_ENV=development node ./server/server.js",
"api": "cross-env NODE_ENV=api node ./server/server.js",
"clean": "rm -rf dist",
"dist": "npm run clean && cross-env NODE_ENV=production webpack --config ./webpack/index.js --progress --colors",
"online": "cross-env NODE_ENV=development node ./server/online.js",
"lint": "node ./node_modules/eslint/bin/eslint.js ./src --fix",
"test": "cross-env NODE_ENV=test jest --no-cache",
"test:watch": "npm test --watch",
"stats": "npm run clean && cross-env NODE_ENV=production webpack --config ./webpack/index.js --profile --json > stats.json",
"gatest": "node ./service/gatest.js"
},
"pre-commit": [
"lint"
],
"jest": {
"verbose": true,
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"setupFiles": [
"./test/setup.js"
],
"moduleFileExtensions": [
"js",
"jsx",
"json",
"md"
],
"moduleDirectories": [
"node_modules"
],
"testMatch": [
"<rootDir>/src/**/__tests__/**/*.{js,jsx,mjs}",
"<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}"
],
"transform": {
"^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest",
"^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
},
"testEnvironment": "jsdom"
},
"devDependencies": {
"asset-inject-html-webpack-plugin": "^0.9.1",
"autoprefixer": "^7.1.3",
"babel": "^6.23.0",
"babel-core": "^6.26.0",
"babel-eslint": "^8.2.1",
"babel-jest": "^22.4.1",
"babel-loader": "^7.1.2",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-jest": "^22.4.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"babel-register": "^6.26.0",
"better-npm-run": "0.1.0",
"body-parser": "^1.17.2",
"chalk": "^2.1.0",
"cross-env": "^5.0.5",
"css-loader": "^0.28.5",
"deepmerge": "^2.0.1",
"enzyme": "^3.3.0",
"eslint": "^4.5.0",
"eslint-config-standard": "^11.0.0-beta.0",
"eslint-config-standard-jsx": "^4.0.2",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-node": "^5.1.1",
"eslint-plugin-promise": "^3.5.0",
"eslint-plugin-react": "^7.3.0",
"eslint-plugin-standard": "^3.0.1",
"exports-loader": "^0.6.4",
"express": "^4.15.4",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.6",
"git-repo-info": "^1.4.1",
"glob": "^7.1.2",
"happypack": "^4.0.1",
"html-loader": "^0.5.1",
"html-webpack-plugin": "^2.30.1",
"idb": "^2.0.4",
"imports-loader": "^0.7.0",
"jest": "^22.4.2",
"lodash.range": "^3.2.0",
"mocha": "^5.0.0",
"node-sass": "^4.5.3",
"node-xlsx": "^0.11.2",
"postcss-loader": "^2.0.6",
"pre-commit": "^1.2.2",
"react-hot-loader": "^3.0.0-beta.6",
"react-test-renderer": "^16.2.0",
"redux-logger": "^3.0.6",
"regenerator-runtime": "^0.11.1",
"request": "^2.74.0",
"require-reload": "^0.2.2",
"rimraf": "^2.6.0",
"sass-loader": "^6.0.6",
"script-loader": "^0.7.0",
"sinon": "^4.2.0",
"style-loader": "^0.19.1",
"uglify-js": "^3.0.28",
"url-loader": "^0.6.2",
"webpack": "^3.5.5",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-middleware": "^2.0.4",
"webpack-dev-server": "^2.7.1",
"webpack-hot-middleware": "^2.18.2",
"webpack-merge": "^4.1.0",
"worker-loader": "^1.1.0"
}
}
рдкреНрд░реАрд╕реЗрдЯ рдХреЛ .babelrc
рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ "env"
рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмреАрдЪ рд╣реИ ["env"]
, рдЗрд╕ рддрд░рд╣:
"env": {
"test": {
"presets": [["env"], "stage-2"],
"plugins": ["transform-es2015-modules-commonjs", "dynamic-import-node"]
}
}
рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ "modules: false"
рд╣реИред
рд╕рд╛рде рд╣реА, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЬреЗрд╕реНрдЯ node_modules
рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , cf https://facebook.github.io/jest/docs/en/configuration.html#transformignorepatterns -array-string
рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА import ...
node_modules
рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
transformIgnorePatterns: []
рдЖрдкрдХреЗ рдЬреЗрд╕реНрдЯ config.
рдЙрдореНрдореАрдж рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛!
@florentchauveau рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@todorone @rochapablo рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛? рдореИрдВ рднреА рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ-
import * as React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:316:17)
at Object.<anonymous> (node_modules/@expo/react-native-action-sheet/index.js:1:107)
рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдорд┐рд▓ рд░рд╣реА рд╣реИ
GiftedChat
- https://github.com/FaridSafi/react-native-gifted-chatред
рд╢рд╛рдпрдж рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ @expo/react-native-action-sheet
рдХреЛ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд┐рдк рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ GiftedChat
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ? рд▓реЗрдХрд┐рди jest
/ ts-jest
(рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ) рдкреНрд░реАрд╕реЗрдЯ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдореЗрд░реА рдЬреЗрд╕реНрдЯ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ -
"jest": {
"preset": "react-native",
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"transform": {
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"transformIgnorePatterns": [
"node_modules/(?!rn-placeholder|react-native|react-navigation|native-base|react-native-datepicker|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|tcomb-form-native)"
],
"setupTestFrameworkScriptFile": "<rootDir>/src/__mocks__/Adapter.js",
"testRegex": "(\\.(test|spec))\\.(ts|tsx|js)$",
"testPathIgnorePatterns": [
"\\.snap$",
"<rootDir>/node_modules/",
"<rootDir>/lib/"
],
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/src/__mocks__/fileMock.js"
},
"cacheDirectory": ".jest/cache"
},
рдФрд░ .babelrc
-
{
"presets": ["react-native"]
}
рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд▓рдЧрднрдЧ рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рдореЗрд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ред
@ omkarjoshi-cc рдЙрд╕ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рдереА рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рдирд╛ рдерд╛ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЛ рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдерд╛:
"transformIgnorePatterns": [
"node_modules/(?!react-native-gifted-chat)/"
]
@rochapablo рд╣рд╛рдБред рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдЪреАрдЬ рд╣реИ рдЬреЛ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреА рд╣реИ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ
рдореИрдВ рдмреЗрдмреЗрд▓ 7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА "transformIgnorePatterns" рдХреЗ рд╕рд╛рде рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рдерд╛ - рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: /
рдореЗрд░реЗ рдкрд╛рд╕ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдореВрд▓ es6 рд╡рд░реНрдЧ рд╣реИрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рд╕реНрд░реЛрдд рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ "es5 рдХреНрд▓рд╛рд╕реЗрд╕" рдХреЛ рдмреИрдмреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рджреЗрд╢реА рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдПрд░рд░ рдорд┐рд▓рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ "рдмреЗрдмреЗрд▓/рдкреНрд░реАрд╕реЗрдЯ-рдПрдирд╡реА" рдХреЛрдб рдХреЛ рдЬреЗрд╕реНрдЯ (рд▓рдХреНрд╖реНрдп рдиреЛрдб) рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ .babelrc рдореЗрдВ 'рд╡рд░реНрддрдорд╛рди-рдПрдирд╡реА' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдИрдПрд╕ 5 рдХреЛ рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛, рд╡реЗрдмрдкреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдирд╛ (рдЬреЛ рдмреИрдмреЗрд▓-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рди рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ), рдлрд┐рд░ рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдВ -> рдореИрдВ webpack -w
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ
рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
"transformIgnorePatterns": [
"node_modules/(?!react-native-gifted-chat|@expo/react-native-action-sheet)"
]
рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред @rochapablo . рдХреЛ рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдореЗрд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, import
рдЖрджрд┐ рдХреЗ рд╕рд╛рде ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рдЕрдкрдиреА рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓/рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)
рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреГрд╖реНрда рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ:
https://babeljs.io/docs/plugins/transform-es2015-modules-commonjs/
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, babel-jest
рдмрдЬрд╛рдп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ transformIgnorePatterns
рд╕рдореНрдорд╛рди рдХрд░реЗрдВ)
"transform": {
"^.+\\.(js|jsx|ts|tsx)$": "ts-jest-babel-7"
}
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдмреЗрдмреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореЗрд░реЗ .babelrc рдореЗрдВ "ignore": ["**/*.test.js"]
рдерд╛ред
рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдирджреЗрдЦрд╛ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рдирд╛ рдерд╛, рдЕрд░реНрдерд╛рдд:
"env": {
"production": {
"ignore": [
"**/*.test.js"
]
}
}
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдкрд░реАрдХреНрд╖рдг env рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдирджреЗрдЦрд╛ рдкреИрдЯрд░реНрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рд╣реИ
рдпрд╣рд╛рдБ рдореЗрд░реА рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВред
.рдмреЗрдмреЗрд▓рдЖрд░рд╕реА
{
"plugins": [
"transform-es2015-modules-commonjs",
"transform-class-properties"
]}
рдПрдВрдЬрд╛рдЗрдо рдХреЗ рд▓рд┐рдП (setupTests.js)
import { configure } from "enzyme";
import Adapter from "enzyme-adapter-react-15";
configure({ adapter: new Adapter() });
рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди
"dependencies": {
"babel-cli": "^6.26.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"eslint": "^4.19.1",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-test-renderer": "^15.6.2",
"babel-jest": "^22.4.3",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"enzyme": "^3.3.0",
"enzyme-adapter-react-15": "^1.0.5",
"gh-pages": "^0.12.0",
"jest": "^22.4.3",
"react-addons-test-utils": "^15.4.2",
"regenerator-runtime": "^0.11.1"
},
"jest": {
"globals": {
"NODE_ENV": "test"
},
"verbose": true,
"moduleDirectories": ["node_modules", "src"],
"transform": {
"^.+\\.jsx?$": "babel-jest"
},
"moduleFileExtensions": ["js", "jsx"],
"setupTestFrameworkScriptFile": "<rootDir>/src/setupTests.js"
}
yarn add --dev babel-jest babel-core regenerator-runtime
рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рд╣реЛ рдЧрдпрд╛
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рдЗрд╕рдХреА рдмреЗрд╡рдХреВрдл рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА, рд╢рд╛рдпрдж env рдЪрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЧрд┐рдЯ рдмреИрд╢ рд╕реЗ рдПрдХ рдЙрдиреНрдирдд cmd.exe
рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ jest
рдХреЛ script
(рдирд╛рдо рдмрджрд▓рдХрд░ test:jest
рд░реВрдк рдореЗрдВ test
) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрд░реЗ package.json
ред рд╣рд╛рд▓рд╛рдВрдХрд┐, npm run test
рдЪрд▓рд╛рддреЗ рд╕рдордп, рдореБрдЭреЗ SyntaxError: Unexpected token import
:
root<strong i="14">@browserify</strong>:/var/machine-learning/src# npm run test
> [email protected] test /var/machine-learning/src
> jest --config /var/machine-learning/test/jest/jest.config.js
FAIL ../test/jest/__tests__/layout/analysis.test.jsx
тЧП Test suite failed to run
/var/machine-learning/test/jest/__tests__/layout/analysis.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
FAIL ../test/jest/__tests__/layout/page.test.jsx
тЧП Test suite failed to run
/var/machine-learning/test/jest/__tests__/layout/page.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
FAIL ../test/jest/__tests__/content/register.test.jsx
тЧП Test suite failed to run
/var/machine-learning/test/jest/__tests__/content/register.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
FAIL ../test/jest/__tests__/content/login.test.jsx
тЧП Test suite failed to run
/var/machine-learning/test/jest/__tests__/content/login.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 0 | 0 | 0 | 0 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 4 failed, 4 total
Tests: 0 total
Snapshots: 0 total
Time: 3.782s
Ran all test suites.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] test: `jest --config /var/machine-learning/test/jest/jest.config.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] test script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-05-08T01_50_42_754Z-debug.log
рдореИрдВрдиреЗ рдЗрд╕реА jest.config.js
рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
module.exports = {
'verbose': true,
'collectCoverage': true,
'coverageDirectory': '/var/machine-learning',
'moduleDirectories': ['/var/machine-learning/src/node_modules'],
'transformIgnorePatterns': [
'/var/machine-learning/src/node_modules'
]
}
рдореБрдЭреЗ react-native
, рдФрд░ transformIgnorePatterns
рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЪреАрдЬрд╝реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рдХреИрд╕реА рдорд╛рдпрд╛рд╡реА рдмрдЧ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ .babelrc
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдореЗрд░реЗ package.json
рдПрдХ jest
рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдордЬрд╝рд╛рдХ script
рдХреИрд╕реЗ рдмреЗрдмреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ? рдореИрдВрдиреЗ рдЕрдкрдиреА package.json
рд╡рд╛рд▓реА рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ .babelrc
рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИ:
{
"env": {
"test": {
"presets": ["env", "stage-2", "react"]
}
}
}
рдиреЛрдЯ: рдпрджрд┐ рдХреЛрдИ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реЗ рдореВрд▓ рдореБрджреНрджреЗ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЗрд╡рдХреВрдл рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓реА рд╣реИрдВ:
.babelrc.js
рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ .babelrc
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ JSON рдХреЗ рдмрдЬрд╛рдп JS рдХреЙрдиреНрдлрд┐рдЧрд░ рд╣реИ, рддреЛ рдпрд╣ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореЗрд░реЗ рд▓рд┐рдП unexpected token: import
рд╣реЛ рдЧрдпрд╛редbabel-7-jest
рдкреБрд░рд╛рдиреЗ рдмреИрдмреЗрд▓ 7 рдХреЛрд░ рдЗрдВрдЬрди рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирдП рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рддреЛрдбрд╝рддрд╛ рд╣реИредnpm i -D [email protected]
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд░ рджреЗрддрд╛ рд╣реИ ред рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдмреЗрдмрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ env.test
рднреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рди рд╣реА рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░ рд╣реИредрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЬреЗрд╕реНрдЯ babel-core
(рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ @babel/core
рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛ рдпрд╣ рдмреИрдмреЗрд▓ 6 рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдирд╡реАрдирддрдо рдмреЗрдмреЗрд▓-рдХреЛрд░ (рдмреНрд░рд┐рдЬ рд╕рдВрд╕реНрдХрд░рдг) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж рдХрд╛рд╕реНрд╡реАрд╡! рдореЗрд░реЗ .babelrc.js
рдХреЛ .babelrc
рдФрд░ npm i -D [email protected]
рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдЕрдм рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг babel-jest
рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ
рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ .js рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдмреИрдмреЗрд▓ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 7 рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмреИрдмреЗрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИ ред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореБрдЭреЗ рдореЗрд░рд╛ рдЬреЗрд╕реНрдЯ + рдПрдВрдЬрд╛рдЗрдо рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмреЗрдЭрд┐рдЭрдХ рдкреНрд░рд╣рд╛рд░ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯрдПрдВрдб рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ?
antd
рдФрд░ rc-calendar
рдЖрджрд┐ рдХреЗ рдХрд╛рд░рдг рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ transformIgnorePatterns
рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдерд╛
transformIgnorePatterns: [
'node_modules/?!(antd|rc-.+)/'
],
рд╢рд╛рдпрдж moduleDirectories
рдиреЗ рднреА рдорджрдж рдХреА:
moduleDirectories: ['node_modules'],
рдореИрдВрдиреЗ рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдмреЗрдмреЗрд▓ 7 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЕрдм рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рдЗрди рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ transformIgnorePatterns
рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрдм рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдм рдмреИрдмреЗрд▓ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдЖрдкрдХреЗ рдмреЗрдмреЗрд▓рд░ рдХреЗ test
рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдкрд░ рдПрдХ рдиреЛрдЯ рд╣реИред
@ kasvtv @ willb335 рдореИрдВ
рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди
"babel": {
"presets": [
"./.babelrc.js"
]
},
рдореИрдВ @ рд╕рд╛рдордЧреНрд░реА/рдЖрдзрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдХреЛрдИ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП package.json
& .babelrc
рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдлреАрдбрдмреИрдХ рд╕реЗ рдКрдкрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд┐рд╢реНрд░рд┐рдд рд╣реВрдВ ...
рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди .babelrc рдлрд╝рд╛рдЗрд▓ рдкрд░ "env" рдкреНрд░реАрд╕реЗрдЯ рдЬреЛрдбрд╝ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛
{
"рдкреНрд░реАрд╕реЗрдЯ": ["env", "es2016", "stage-0", "react"]
}
рдЗрд╕ рд▓рд┐рдВрдХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ
https://jestjs.io/docs/hi/webpack.html
@negarineh рдЖрдкрдХрд╛ рд▓рд┐рдВрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛
@haywirez рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП transformIgnorePatterns
рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░рд╛ . рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ
SyntaxError: Unexpected token import
рдПрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐
TypeError: Cannot read property 'DocumentDir' of undefined
рддреНрд░реБрдЯрд┐ рдпрд╛рдиреА рдкреИрдХреЗрдЬ (rn-fetch-blob) рдЕрдм рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл transformIgnorePatterns: [],
рдХреЛ рдореЗрд░реЗ jest.config.js
рдЬреЛрдбрд╝рдиреЗ рд╕реЗ SyntaxError TypeError рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
@schhumannd рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЧрд▓рддреА рдХреА рд╣реИ, рд▓рд┐рдВрдХ рдЕрдм рдЖрдкрдХреЛ рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ "jest.config.js" рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд▓рд┐рдВрдХ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рддреНрд░реБрдЯрд┐ .css рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреИрд╕реЗ рд▓рд┐рдВрдХ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рдПрдХ рдирдХрд▓реА рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде "identity-obj-proxy" рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
npm install --save-dev identity-obj-proxy
jest.config.js (рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП):
{
"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)$": "identity-obj-proxy"
}
}
}
рд╕рд╛рде рд╣реА, рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдореЗрд░реА .babelrc рдлрд╛рдЗрд▓ рд╣реИ (test.config.js рднреА рд░реВрдЯ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП):
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреЗрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ" рдФрд░ "рд░реАрдЬреЗрдирд░реЗрдЯрд░-рд░рдирдЯрд╛рдЗрдо" рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
npm --dev babel-jest babel-core regenerator-runtime
рдлрд┐рд░ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ .babelrc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
{
"presets": ["env", "react"],
"plugins": ["transform-class-properties"],
"env": {
"production": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"test": {
"presets": ["env", "react"],
"plugins": ["transform-export-extensions"],
"only": [
"./**/*.js",
"node_modules/jest-runtime"
]
}
}
}
рдЙрдореНрдореАрдж рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛ред
https://jestjs.io/docs/hi/webpack.html
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд .babelrc
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
{
"presets": ["env", "react"],
"env": {
"test": {
"plugins": ["transform-class-properties"]
}
}
}
рдФрд░ рдлрд┐рд░ NODE_ENV=test jest
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ
рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред
рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдореЗрд░реА рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдереАред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп require
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд▓реЛрдЧред рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ aa babelrc рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ... рдХреЗрд╡рд▓ babel.config.js. рдХреГрдкрдпрд╛, рдЖрдк babel.config.js рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж
рдЙрдкрд░реЛрдХреНрдд рдЪрд░реНрдЪрд╛ рд╕реЗ babel
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рдЦреЛрдЬ рд╕реЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк (рдЬреИрд╕реЗ esm
рд╡рд┐рдХрд▓реНрдк) рдХреЗ рд▓рд┐рдП рдХрдИ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА - рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрдореНрдкреЛрд░реНрдЯ рдХреАрд╡рд░реНрдб рдЬреЗрд╕реНрдЯ рд╕реЗ рдПрд░рд░ рджреЗрддрд╛ рд░рд╣рд╛ред рдпрд╣ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ es6 рдЖрдпрд╛рдд рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЗрддрдирд╛ рдХрдард┐рди рд╣реИред
рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣реА рдХрд╛рдо рдХрд┐рдпрд╛: ts-jest
рдЕрдм, рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА ts-jest
рдХрд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ)ред рдпрд╣ рд╕рд┐рд░реНрдл рдордЬрд╛рдХ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдареАрдХ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛:
npm i -D jest typescript ts-jest @types/jest
jest.config.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
transform: {
"\\.js$": "ts-jest",
transformIgnorePatterns: [],
},
рдЬреЗрд╕реНрдЯ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ js
рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде tsconfig.json
рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
{
"compilerOptions": {
"allowJs": true,
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true
}
}
рд╕рднреА babel
рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред npm
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдиреАрдЪреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
"scripts": {
"test": "jest --runInBand --detectOpenHandles --no-cache --config ./jest.config.js"
}
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдирдВрдЧреЗ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рд░реЗрдкреЛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬреЗрдПрд╕ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╕реЗрдЯрдЕрдк рд╣реИ?
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдирдВрдЧреЗ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рд░реЗрдкреЛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬреЗрдПрд╕ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╕реЗрдЯрдЕрдк рд╣реИ?
рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рдПрдХ рд╕рдорд╛рди рдореБрджреНрджреЗ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрд╛ рдЬреЛ рдореВрд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Imports рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрдд рд╣реБрдИ https://github.com/airbnb/babel-plugin-dynamic-import-node рдкрд░ рдЙрдкрд▓рдмреНрдз рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ .babelrc рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
{
...
"env": {
"test": {
"plugins": ["dynamic-import-node"]
}
...
}
рдореИрдВ рд╕рд┐рд░реНрдл рд╡рд┐рдХрд▓реНрдк рд╣рдЯрд╛рддрд╛ рд╣реВрдВ: { рдореЙрдбреНрдпреВрд▓: рдЭреВрдард╛ }, рдФрд░ рдлрд┐рд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
"presets": [
["@babel/env", {module: false} ],
"@babel/preset-react",
"@babel/preset-typescript"
]
transformIgnorePatterns: []
рдХреЛ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ transform-es2015-modules-commonjs
рдХреЛ babelrc рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рдордЬрд╝рд╛рдХ: ^23.1.0,
рдмреЗрдмрд▓: 6.26.3
@ngmgit рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ ...
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
.babelrc
рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрд╕реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ .babelrc
рд╕реЗ babel.config.js
рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреАред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реА!
рдпрд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ, рдЙрд╕рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЗрд╕рдмреБрдХ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╕реНрддрд░ рд╣реИ, рдореИрдВ 8+ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рджрд┐рди рдХреЗ 5 рдШрдВрдЯреЗ рдмрд┐рдирд╛ рд╕рдлрд▓рддрд╛ рдХреЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдореБрджреНрджреЛрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмрд┐рддрд╛рдПред рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдкрд░ред
рдореИрдВ рдЬреЗрд╕реНрдЯ + рд░рд┐рдПрдХреНрдЯ-рдЯреЗрд╕реНрдЯрд┐рдВрдЧ-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрд╕реНрдЯ рд╣рд░ рдмрд╛рд░ рдореБрдЭреЗ рдПрдХ рдирдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдЪрд┐рд▓реНрд▓рд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рджреЗрддрд╛ рд╣реИред рдмреЗрдмреЗрд▓ рдХреЛ рд╕рдм рдХреБрдЫ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рд░ рдорд╛рди рд▓реА рд╣реИ, рдореИрдВ рдЕрдм рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЬреЛрдбрд╝рдирд╛ рд░рджреНрдж рдХрд░ рджреВрдВрдЧрд╛ред
рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЬреЗрд╕реНрдЯ + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдкрд░реАрдХреНрд╖рдг-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж рдХрдИ SO рдЙрддреНрддрд░ рдФрд░ github рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде, @cpojer рдХреЗ рдЙрддреНрддрд░ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛! ЁЯЩП
рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдирд╡реАрдирддрдо рдФрд░ рдорд╣рд╛рдирддрдо рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рдиреЗ рдореЗрд░реА рдорджрдж рдХреА:
babel.config.js
module.exports = {
"env": {
"production": {
- "plugins": ["transform-es2015-modules-commonjs"]
# new kid on the block
+ "plugins": ["@babel/plugin-transform-modules-commonjs"]
}
}
}
jest.config.js
module.exports = {
// if you're also using typescript
preset: "ts-jest",
testEnvironment: "node",
verbose: true,
// registers babel.config.js with jest
transform: {
"^.+\\.js$": "babel-jest",
},
// explicitly include any node libs using ESM modules
transformIgnorePatterns: ["node_modules/?!(<ESM module here>|<another here>|<etc...>)"],
}
babel-jest
@babel/plugin-transform-modules-commonjs
ts-jest
(рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рд▓рд┐рдП)рдпрд╣ рд╕рдорд╕реНрдпрд╛ рддрдм рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬреЗрд╕реНрдЯ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ...
рдпрджрд┐ рдЖрдк react-native
рдпрд╛ jest-expo
рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ .js
рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ transform
рдХреЛ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдореИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ https://jestjs.io/docs/en/configuration.html#transform -objectstring-pathtotransformer--pathtotransformer-object рд╕реЗ рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред
transform: { '^.+\\.[jt]sx?$': 'babel-jest' }
рдореИрдВ рдпрд╣рд╛рдВ pnpm рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ....
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг pnpm рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ pnpm рдкрде рднрд┐рдиреНрди рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рд░реЗрдЧреЗрдХреНрд╕ рдХреЗрд╡рд▓ node_modules
dirs рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
/xxx/node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/input/String
рджреЗрдЦреЗрдВ: https://regexr.com/5cs2h
"transformIgnorePatterns": [
"node_modules/(?!(react-native|my-project|react-native-button)/)"
]
https://jestjs.io/docs/en/tutorial-react-native#transformignorepatterns -customization
.*
рдЬреЛрдбрд╝рдХрд░ рдЕрдВрддрд┐рдо рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХ рд▓реБрдХрд╣реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
node_modules/(?!(.*antd/es)/)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдк рд╕рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ ES рдореЙрдбреНрдпреВрд▓ рдиреЛрдб рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди (рд╡реЗрдмрдкреИрдХ, рд░реЛрд▓рдЕрдк) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмреЗрдмрд▓рдЖрд░рд╕реА рдореЗрдВ "рдкрд░реАрдХреНрд╖рдг" рдПрдирд╡реА рдХреЗ рд▓рд┐рдП рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЙрдордирдЬреЗрдПрд╕ рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреЗрдЦреЗрдВ https://babeljs.io/docs/usage/babelrc/#env -option рдФрд░ https://babeljs.io/docs/ рдкреНрд▓рдЧрдЗрдиреНрд╕/рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рдПрд╕2015-рдореЙрдбреНрдпреВрд▓-рдХреЙрдордирдЬ/