рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдмрдЧ
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЯреНрд░реА рджрд┐рдпрд╛:
src/app/modules
тФЬтФАтФА module1
тФВ┬а┬а тФЬтФАтФА index.js
тФВ┬а┬а тФЬтФАтФА __tests__/
тФЬтФАтФА module2
тФВ┬а┬а тФЬтФАтФА index.js
тФВ┬а┬а тФЬтФАтФА __tests__/
рдореИрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд░рдХреЗ modules
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдмрд╛рд╣рд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
import Module1 from '../modules/module1';
import Module2 from '../modules/module2';
рдореИрдВ module1
рдФрд░ module2
рдореЙрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ рдмрдирд╛рдиреЗ src/app/modules/module1/__mocks__/index.js
рдФрд░ src/app/modules/module2/__mocks__/index.js
, рдореИрдВ рджрд┐рдпрд╛ рд╣реВрдБ duplicate manual mock found
рддреНрд░реБрдЯрд┐ рд╕реЗ jest-haste-map
ред
рдЕрдЧрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ src/app/modules/__mocks__/{module1.js,module2.js}
рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдирдХрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдЧ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ GitHub рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдХрд┐ рд╣рдо npm install
рдФрд░ npm test
рдХрд░ рд╕рдХреЗрдВред
рдКрдкрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦреЗрдВред
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рд╕реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрдердирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
--debug
рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рдкреНрд░рд┐рдВрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рдиреЛрдб v6.2.0
npm v3.8.9
OS X 10.11.6
> NODE_ENV=test jest --env jsdom "--debug" "src/app/redux/modules/devices"
jest version = 17.0.0
test framework = jasmine2
config = {
"moduleFileExtensions": [
"js",
"json"
],
"moduleDirectories": [
"node_modules"
],
"moduleNameMapper": [
[
"^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$",
"/Users/paul/dev/tools/jest/mock-assets.js"
],
[
"^.+\\.css$",
"identity-obj-proxy"
]
],
"name": "dev",
"setupTestFrameworkScriptFile": "/Users/paul/dev/tools/jest/setup-framework.js",
"testPathDirs": [
"/Users/paul/dev/src"
],
"testRegex": "/__tests__/.*\\.test\\.js$",
"timers": "fake",
"rootDir": "/Users/paul/dev",
"setupFiles": [],
"testRunner": "/Users/paul/dev/node_modules/jest-jasmine2/build/index.js",
"testEnvironment": "/Users/paul/dev/node_modules/jest-environment-jsdom/build/index.js",
"transform": [
[
"^.+\\.jsx?$",
"/Users/paul/dev/node_modules/babel-jest/build/index.js"
]
],
"usesBabelJest": true,
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/dm/vt920lmd6tzdq_709zkykwx40000gn/T/jest",
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"expand": false,
"globals": {},
"haste": {
"providesModuleNodeModules": []
},
"mocksPattern": "__mocks__",
"modulePathIgnorePatterns": [],
"noStackTrace": false,
"notify": false,
"preset": null,
"resetMocks": false,
"resetModules": false,
"snapshotSerializers": [],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testURL": "about:blank",
"transformIgnorePatterns": [
"/node_modules/"
],
"useStderr": false,
"verbose": null,
"watch": false,
"cache": true,
"watchman": true,
"testcheckOptions": {
"times": 100,
"maxSize": 200
}
}
jest-haste-map: duplicate manual mock found:
Module name: index
Duplicate Mock path: /Users/paul/dev/src/app/modules/push-notification-manager/__mocks__/index.js
This warning is caused by two manual mock files with the same file name.
Jest will use the mock file found in:
/Users/paul/dev/src/app/modules/push-notification-manager/__mocks__/index.js
Please delete one of the following two files:
/Users/paul/dev/src/app/modules/image-file/__mocks__/index.js
/Users/paul/dev/src/app/modules/push-notification-manager/__mocks__/index.js
No tests found
1 file checked.
testPathDirs: /Users/paul/dev/src - 1 match
testRegex: /__tests__/.*\.test\.js$ - 0 matches
testPathIgnorePatterns: /node_modules/ - 1 match
+1
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, cacheDirectory
/ var / рдлрд╝реЛрд▓реНрдбрд░реЛрдВ / dm / vt920lmd6tzdq_709zkykwx40000gn / T / jest рдФрд░ рдкреБрди: npm рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирд╛рдУрдВ рдХреЗ рдмрд╛рдж, рдпреЗ рд╕рдВрджреЗрд╢ рдЧрд╛рдпрдм рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВред
рдпрд╣рд╛рдБ рдЕрдкрдорд╛рдирдЬрдирдХ рдХреЛрдб рд╣реИ:
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИ:
рдЬрд┐рд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:
https://github.com/facebook/jest/commit/cfade282fbbe2737b6dd2cee1cf3da3ee8624512
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╣рдо рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реЗ рд░рд╛рд╕реНрддреЗ рдХреЗ рдмрдЬрд╛рдп basename
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
/ cc @flarnie
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП basename
s рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдореЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛:
import { MyWhatever } from 'models/MyWhatever/schema';
import { MyOtherWhatever } from 'models/MyOtherWhatever/schema';
рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдореИрдиреБрдЕрд▓ рдореЛрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЬреЗрд╕реНрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрди рджреЛрдиреЛрдВ рдХреЛ schema
рдореЙрдХрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВрдЧреЗред
рдпрджреНрдпрдкрд┐ рд╕рдорд╛рдзрд╛рди рддреБрдЪреНрдЫ рд╣реИ (s / рд╕реНрдХреАрдорд╛ / MyWhateverSchema /), рдпрд╣ рдЬреИрд╕реНрдЯ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдФрд░ рдкреБрдирд░реНрдЧрдарди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЧ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред
рд╣рд╛рдБ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреВрд╕рдирд╛ рд╣реИред рдореИрдиреБрдЕрд▓ рдореЙрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдлрдмреА рдХреЗ рд╕рднреА рдХреЛ рддреЛрдбрд╝ рди рджреЗрдВ (рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ :))
рдардВрдбрд╛ред рдореБрдЭреЗ рдХрд▓ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ tomorrow
@cpojer рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг
рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ fb рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддреА рдЕрдиреНрдпрдерд╛ рдХреИрд╕реЗ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рджреЛ рдирдХрд▓реА рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХреЛрдИ рдорддрд▓рдм ...
рд╣рд╛рдБ, рдирдХрд▓реА "рд╡реИрд╢реНрд╡рд┐рдХ" рднреА рд╣реИрдВред рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рдбрд┐рдЬрд╛рдЗрди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЬреАрдирд╛ рд╣реЛрдЧрд╛ред FB рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрд▓рдд рд╕реНрдерд╛рди рдкрд░ 4000+ рдирдХрд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ (рдФрд░ рдЕрдХреНрд╕рд░ рд╡рд╣рд╛рдБ рднреА рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ)ред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдкреАрдЖрд░рдПрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдЬреЛ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ - рдЕрдЧрд░ рд╣рдо рдЬреЗрдмреА рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдлрдмреА рдкрд░ рдмрдирд╛рдП рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
@cpojer рдПрдХ рдЭрдВрдбреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? рдХреНрдпрд╛ рдЖрдк рдПрдХ рдРрд╕рд╛ рдЬрдирд╕рдВрдкрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрд╕реЗ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо / рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реЛ?
рд╣рд╛рдБ, рдпрд╣ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдлреАрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
@ cpojer рд╕рд╣реА - рдпрд╣ рд╕реНрдкрд░реНрд╢ рдЬрд╕реНрдЯ рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ?
рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛрдб рдХреЛ jest-runtime рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: https://github.com/facebook/jest/blob/master/packages/jest-runtime/src/index.js рдФрд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЬреЗрд╕реНрдЯ-рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдФрд░ рдЬреЗрд╕реНрдЯ-рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди-рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╣реИ ред
@ рд╕рдВрдХреЗрдд
@cpojer рдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП JEST_USE_BASENAME_FOR_CACHING
рдЬреИрд╕реЗ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рд╛?
рдХрдо рд╕реЗ рдХрдо, рд╣рдо рдЧреИрд░-рдЕрджреНрд╡рд┐рддреАрдп рдлрд╝рд╛рдЗрд▓рдирд╛рдореЛрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдлрдмреА рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рддреЛрдбрд╝ рджреЗрдЧрд╛ред
рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдХреБрдЫ /etc/profile
рдпрд╛ ~/.bashrc
export JEST_USE_BASENAME_FOR_CACHING="true"
(рдпрд╛ рдПрдирд╡реА рдХреЗ рд╕рд╛рде рдХреБрдЫ рдлрд╝рд╛рдЗрд▓)
рдФрд░ рдлрд┐рд░
$ jest
рдпрд╛ рдпрд╣ рдПрдХ, рдмрд┐рдирд╛ рдПрдирд╡реА рдлрд╛рдЗрд▓ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ:
$ JEST_USE_BASENAME_FOR_CACHING="true" jest
рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдпрд╣ рд╣реИрдХ рдХреА рддрд░рд╣ рд╣реИ рдпрд╛ рдпрд╣ рдареАрдХ рд╣реИ? :рдЖрдБрдЦ рдорд╛рд░рдирд╛:
рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдирдП рд░реЗрдкреЛ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдЬреЗрд╕реНрдЯ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ ( ^15.0.0
рдФрд░ ^17.0.0
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
@ColCh рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдХреИрд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рд╢рд╛рдпрдж рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдирд╛рдо JEST_USE_BASENAME_FOR_MOCKING
ред
@cpojer рдпрджрд┐ FB рдХреЛрдб рдореЗрдВ рдирд╛рдореЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ, рддреЛ mocks рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реНрдг рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдВ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ?
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
getMockName
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЗрд╕ рдкрд░ @cpojer рдЬрд╡рд╛рдм рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рд╣реЗ рд╕рдм рд▓реЛрдЧ, рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдореИрдВ рдЕрднреА рд╕рд╛рдорд╛рди рдХреА рдПрдХ рдЯрди рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдБред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдареАрдХ рд╣реВрдВ рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдмрджрд▓рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдиреБрдЕрд▓ рдореЙрдХрд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЬрд┐рд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдЬрд▓реНрджрдмрд╛рдЬреА рдореЙрдбреНрдпреВрд▓" (рдЖрдВрддрд░рд┐рдХ FB рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо) рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ "haste_modules": ['path/a', 'path/b']"
рдФрд░ рдлрд┐рд░ рдЙрди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЕрдЬреАрдм рдореЙрдХрд┐рдВрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ред рдЕрдЧрд░ рдХреЛрдИ рднреА рдпрд╣ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдЧрд╛ред
рдПрдХ рдмрд╛рдд рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╣реИ: рдпрджрд┐ рд╕рднреА рдореИрдиреБрдЕрд▓ рдореЛрдХреНрд╕ рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ, рдЬреИрд╕реЗ __mocks__/a.js
рдореИрдкреНрд╕ рд╕реЗ a.js
, рддреЛ рд╣рдо рдиреЛрдб_рдореЙрдбрд▓ рдореЛрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ:
__node_modules_mocks__
рдлрд╝реЛрд▓реНрдбрд░ рдкреЗрд╢ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рд╡рд╣ рдмрджрд╕реВрд░рдд рд╣реИредrootDir
(рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ) рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╢реАрд░реНрд╖ рд╕реНрддрд░ __mocks__
рдлрд╝реЛрд▓реНрдбрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдЗрд╕рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
["<rootDir>"]
рдЬреИрд╕рд╛ рд▓рдЧреЗрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
рдХреНрд░рдо рдореЗрдВ:
рд╣реБрд░реНрд░реА: рдореБрд╕реНрдХрд╛рди:: рддрджрд╛:
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреЗ рд╕рд╛рде рдЬрд░реВрд░рддреЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред
рдЖрдкрдХреЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм "рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рдореЙрдбреНрдпреВрд▓" рдХрд╣рдирд╛ рд╣реИ?
рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ: /path_1/a
, /path_1/b
, /path_2/a
, /path_2/c
, рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ:
"haste_modules:" ["/path_1/a", "/path_2/c"]
рдХреЗрд╡рд▓ /path_1/a
рдФрд░ /path_1/b
рдХреЗрд╡рд▓ /path_1
, рдЗрд╕рд▓рд┐рдП /path_2/c
рдорд╛рдиреНрдп рд╣реИ, рдФрд░ /path_2/a
рдПрдХ рддреНрд░реБрдЯрд┐ / рдЪреЗрддрд╛рд╡рдиреА рдЙрдард╛рддрд╛ рд╣реИред
рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ, рд▓рдХреНрд╖реНрдп рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рд╕рдВрдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рдВрдЧрд▓ / рдбрдмрд▓ *
ред
рдореИрдВ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рдП
рдпрджрд┐ рдЖрдк рдЬрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ (рдЬреИрд╕реЗ: fs) рд╣реИ, рддреЛ рдореЙрдХ рдХреЛ рдЙрд╕реА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдиреЛрдб_рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, haste_modules
рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ collectCoverageFrom
рдФрд░ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд░рд╣ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ: рдЧреНрд▓рдмреНрд╕ рдХреА рд╕рд░рдгреА
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА src
_haste_ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВ, рдФрд░ рд╕рд┐рд░реНрдл рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЧреИрд░-рдЬрд▓реНрджрдмрд╛рдЬреА рд╣реИ:
haste_modules: [
"src",
"!src/foo"
]
@EnoahNetzach рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдиреЛрдб рдФрд░ рдиреЛрдб рд╕реЗ рдРрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд╛рдо рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдЗрд╕реЗ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ... рд╣рдореНрдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рджрд┐рдП рдЧрдП рдиреЛрдб рдореЙрдбреНрдпреВрд▓
project/node_modules/react
, рдирдХрд▓реАproject/__node_modules_mocks__/react.js
рдЕрдВрджрд░ рд╣реЛрдВрдЧреЗ
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕project/react.js
рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛproject/__mocks__/react.js
(рдмреЗрд╢рдХ, react.js
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣рд╛рдВ рд╕рднреА рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ npm рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдордЬрд╛рдХ node_modules рдореЙрдбреНрдпреВрд▓ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдПрдХ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИ, рддреЛ ... рд╣реЛ рд╕рдХрддрд╛ рд╣реИ _rareness_ node_modules рдордЬрд╛рдХ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ _ugliness_ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рдХрд╛ рднреА рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓?
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛- рдореВрд▓рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдХреНрд╕рд░ application modules
рдореЙрдХ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ lodash
)
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕:
jest.mock
рдХреЙрд▓ рдХреА рдПрдХ рд▓рдВрдмреА рд╕реВрдЪреА__ рдореИрдВ рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ__: рдХреБрдЫ рд░рд╛рд╕реНрддреЛрдВ рдкрд░ _auto mock_ рдореЙрдбреНрдпреВрд▓ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рд░рдгреА-рдСрдл-рдЬреЗрд╕реНрдЯ-рдЧреНрд▓рдмреНрд╕ , рдФрд░ рдЙрд╕ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЙрд╕ рдХрджрдо рдХрд╛ рд╡рд░реНрдгрди рдЪрд░рдгрдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдХрд░реВрдВрдЧрд╛
рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП
"autoMockingPaths": [
"src/components/dumb/**/*.js",
]
рдФрд░ рдпрд╣ рдХреЛрдб src/screens/app.js
:
import _ from 'lodash';
import Button from '../../components/dumb/button.js';
// blah blah AppScreen implementation skipped
рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ src/screens/__tests__/app-test.js
рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб:
import AppScreen from '../app.js';
describe('AppScreen', () => /* testing app screen */);
рд╣рдо app-test.js
рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:
AppScreen
рдирдХрд▓реА рдирд╣реАрдВ рд╣реИlodash
рдирдХрд▓реА рдирд╣реАрдВ рд╣реИButton
, рдЬреЛ AppScreen
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ... рдЖрдк рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ automock
config рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЦреЗрд▓реЗрдЧрд╛?
рдмрд╕ рдХрд╣ рд░рд╣рд╛ рд╣реИ, automock: true
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
"autoMockingPaths": [
"<rootDir>"
]
рд╕рд┐рд░реНрдл automock
рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдореВрд▓реНрдп рдХрд╛ рдкрд░рд┐рдЪрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рджреЗрдЧрд╛
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде:
automock: "app"
jest рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рдСрдЯреЛ рдореЙрдХ рдХрд░реЗрдЧрд╛, рдФрд░ node_modules
рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдЫреЛрдбрд╝ рджреЗрдЧрд╛
рдХреНрдпрд╛ рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрддрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ automocking, @cpojer ? рдореБрдЭреЗ рдпрд╣ рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдХреБрд╢рд▓ рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ "haste_modules"
рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рд╣рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдореЗрд░рд╛ рдЬрдВрдЧрд▓реА рдЕрдиреБрдорд╛рди рдпрд╣ рд╣реИ рдХрд┐ "autoMockingPaths"
var рдЙрдкрдпреЛрдЧреА рдФрд░ рд▓реЛрдЪрджрд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореБрдЭреЗ "automock": "app"
рдмрд╣реБрдд рдХрдбрд╝реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ ( jest рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдСрдЯреЛрдореЛрдХрд┐рдВрдЧ)ред
__node_modules_mocks__
рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рджреБрд░реНрд▓рднрддрд╛ рдХреБрд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рддреА рд╣реИ (рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╢рд╛рдпрдж рд╣реА рдХрднреА node_modules
рдирдХрд▓реА рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рд╣рдо jest.mock(...)
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдПрдХрдорд╛рддреНрд░ рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рд╣реИ: рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдиреЗрд╕реНрдЯреЗрдб node_modules
рдлреЛрд▓реНрдбрд░ (рдЬреИрд╕реЗ src/node_modules
) рд╣реЛ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЧреНрд▓реЛрдмрд▓ __node_modules_mocks__
, рдиреЗрд╕реНрдЯреЗрдб рд╡рд░реНрдЬрди рд╕реЗ рдЗрд╕рдХреЗ рдореЙрдбреНрдпреВрд▓реНрд╕ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рд╣реЛрдЧрд╛ рдпрд╣, рдпрд╛ рдЖрдо рддреМрд░ рдкрд░ __mocks__
рд╕рд╣-рд╕реНрдерд┐рдд рдХреЗ рд╕рд╛рде?
рдмрд╕ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ node_modules
рдФрд░ app modules
рдореЗрдВ рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рд╣реЛ
рдЬреИрд╕реЗ
app/express.js
рдРрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
рдФрд░ npm рд╕реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВapp/node_modules/express
throw new Error("can't mock express.js file - it duplicates one from node_modules")
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, __mocks__
рдХрд╛ рдЙрдкрдпреЛрдЧ node_modules
рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЗрд╡реЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯрдХрд░рд╛рд╡реЛрдВ рдкрд░ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ
рдирд╣реАрдВ ... рдпрд╣ __node_modules_mocks__
рд╕реЗ рдЕрдзрд┐рдХ рдмрджрд╕реВрд░рдд рд╣реИ, рд╣реИ рдирд╛?
рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ npm install
ed рдореЙрдбреНрдпреВрд▓ x
рдФрд░ рдмрд╛рдж рдореЗрдВ, рдЖрдкрдХреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЧрд╣рд░рд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ x
рдиреЗрд╕реНрдЯреЗрдб node_modules
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ ?
рдирд╛рдордХрд░рдг рдЯрдХрд░рд╛рд╡ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдХрдЯрддрдо рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдХрд░ рдиреЛрдб рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдКрдкрд░ рд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ Create React App рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдкрд░, @cpojer рдпрд╣ рдореБрджреНрджрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?
рдЖрдЗрдП рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╢реНрд╡реЗрддрд╕реВрдЪреА / рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ <rootDir>/__mocks__
рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдореЛрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЗрд╕реЗ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: "GlobalMocks" рдЬреЛ <rootDir>/__mocks__
рд▓рд┐рдП рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ?
рдореБрдЭреЗ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЗрд╕ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдереЛрдбрд╝реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реВрдВ
@cpojer рдХреЛ рдмрд╕ globalMocks
рдХреЙрдиреНрдлрд┐рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ <rootDir>/__mocks__
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ jest рдХреЗ рднреАрддрд░ node-haste
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ? рдпрд╛ рдпрд╣ рдкрдереЛрдВ рдХреА рд╕рд░рдгреА рд╣реЛрдЧреА?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдпреЗ рдХреБрдЫ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХрд╡рдЪрди GlobalMocks рд╡рд┐рдХрд▓реНрдк (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рд░рдгреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ hasteModules рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ haw рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрде рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреАред рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ jest-haste-map рдФрд░ jest-resolution рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдЕрднреА рддрдХ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред
рдкреНрд░реЗрд╖рдХ: рдореИрдХреНрд╕ рд╕рд┐рд╕реЛрдПрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рдкреНрд░реЗрд╖рд┐рдд: рд╢реБрдХреНрд░рд╡рд╛рд░, 9 рджрд┐рд╕рдВрдмрд░, 2016 8:18:44 рдкреВрд░реНрд╡рд╛рд╣реНрди
To: рдлреЗрд╕рдмреБрдХ / рдЬреЗрд╕реНрдЯ
Cc: рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд╝ рдкреЙрдЬрд╝рд░; рдЙрд▓реНрд▓реЗрдЦ
рд╡рд┐рд╖рдп: Re: [facebook / jest] [рдмрдЧ] рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдореИрдиреБрдЕрд▓ рдирдХрд▓реА рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд╛рдпрд╛ (# 2070)
рдореИрдВ рдЗрд╕ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдереЛрдбрд╝реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реВрдВ
@cpojer https://github.com/cpojer рд╕рд┐рд░реНрдл рдкреБрдирд░реНрдХрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде GlobalMocks рдХреЙрдиреНрдлрд╝рд┐рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдПрдВ
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реАрдзреЗ рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/facebook/jest/issues/2070#issuecomment-265958606 рдкрд░ https://github.com/notifications/unubscribe-auth/AAA0KAMFc34iKqBDLHZGHGQGHGQGHGQGGQ3GGQGGQ3GGQGG3GGQ3G рдкрд░ рдИрдореЗрд▓
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдЯреВрдЯ рдЧрдпрд╛, рдФрд░ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдЗрд╕реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ (1-2 рдорд╣реАрдиреЗ) рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореИрдВрдиреЗ рдЗрд╕ PR рдкрд░ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рдЦреЛ рджрд┐рдпрд╛ рд╣реИ :( рдЗрд╕рд▓рд┐рдП, рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдБ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред
getMockName
рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдЬреЗрд╕реНрдЯ рдХреЗ рдЗрдВрдЯрд░реНрдирд▓ рд╕реЗ рднреА рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдлрдмреА рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдмреНрд░реЗрд╕реНрдЯ рдХреЗ рдорд╕рд▓реЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИред
рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдЬрд┐рддрдирд╛ рд╕реЛрдЪрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдореИрдиреБрдЕрд▓ рдореЛрдХреНрд╕ рдХреЛ рд╡реЗ рдирд┐рдХрдЯрддрдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
{ 'aws-sdk': '/Users/project/__mocks__/aws-sdk.js',
'slack': '/Users/project/__mocks__/slack.js',
'/Users/project/db/index': '/Users/project/db/__mocks__/index.js',
'/Users/project/slack/index': '/Users/projects/slack/__mocks__/index.js' }
require('aws-sdk')
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП /Users/project/__mocks__/aws-sdk.js
рдпрд╣ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд▓реА рд╣реИ node_module
ред
require('./db')
(рдпрд╛ db
рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкрде) рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: /Users/project/db/__mocks__/index.js
ред
рдЬреЗрд╕реНрдЯ рдореИрдиреБрдЕрд▓ рдореЙрдХ рдХреЛ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рд╕рдордЭ (рдФрд░ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдкреНрд░рд▓реЗрдЦрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдКрдкрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╣ рдерд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ __mocks__
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдХ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрд░реАрдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдиреБрдЕрд▓ рдореЛрдХреНрд╕ рдХреЛ __mocks рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдХрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ __ / рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддреБрд░рдВрдд рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рдЯреЗред (https://facebook.github.io/jest/docs/manual-mocks.html)
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░?
рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕рд╛ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд╛рд╕ рд╣реИ: https://github.com/facebook/jest/compare/master...mhahn : issue-2070-new-mock-resolution
рдпрд╣ рдЬреЗрд╕реНрдЯ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╣реБрдордд рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рд╢реБрджреНрдз "рдирд╛рдо" рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ: https://github.com/facebook/jest/blob/master/packages/jest-runtime/src/__mocks__/ createRuntime.js
IMO, createRuntime
рдЬреИрд╕рд╛ рдХреБрдЫ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрд░реНрддрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдПрдХ рдореИрдиреБрдЕрд▓ рдореЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдЪрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд╛рдл рдХрд░реЗрдЧрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рддреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдлреЗрд╕рдмреБрдХ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред
@ cpojer рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рдореИрдВрдиреЗ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдирд╣реАрдВ рд╕рдордЭрд╛: https://github.com/facebook/jest/issues/2070#issuecomment -265027510ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВрдЧреЗ?
рджреЛ рдирдП рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:
fullPathMockResolution
(рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП false
рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ)namedMockDirectories
: рдпрджрд┐ fullPathMockResolution
рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдЙрд╕ рд╕рд░рдгреА рдХреЗ рднреАрддрд░ рдХреЛрдИ рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рдПрдлрдмреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд┐рд░реНрдл [<rootDir>]
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВредрдЗрд╕рд╕реЗ рджреЗрд╡реЛрдВ рдХреЛ рдкреВрд░реНрдг рдкрде рд╕рдВрдХрд▓реНрдк рдореЗрдВ рдЪрдпрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдЬреЗрд╕реНрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рднреА рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
cc @voideanvalue рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ (рдирдП рдирд╛рдорд╛рд╡рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рдореИрдиреБрдЕрд▓)ред
+1, рдХреНрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
+1
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд░реНрджрдирд╛рдХ рд╣реИ:
project/
тФЬтФАтФА models
тФВ тФЬтФАтФА index.js
тФВ тФЬтФАтФА __mocks__/
тФВ тФВ тФЬтФАтФА index.js/
тФЬтФАтФА challenges
тФВ тФЬтФАтФА index.js
тФВ тФЬтФАтФА __mocks__/
тФВ тФВ тФЬтФАтФА index.js/
рдЕрднреА рдореБрдЭреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ рджреЛ 'рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА' рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдирд╛рдо рди рд╣реЛрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрде рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪреАрдпрд░реНрд╕,
рдбреЛрдорд┐рдирд┐рдХ
@cpojer рджреЛрд╕реНрддреЛрдВ рдпрд╣рд╛рдБ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдХреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо рд╣реИ?
рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдХрд╛рдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рд╣реИ
jest.mock('models/index', () => require('models/index/_mocks_/index'));
рдореИрдВрдиреЗ __mocks__
рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо _mocks_
рддрд╛рдХрд┐ jest рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдХрдбрд╝ рди рд╕рдХреЗред
рдПрдХ рджрд┐рди рдЬрдм рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рддреЛ рдореИрдВ _mocks_
рд╕реЗ __mocks__
рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреВрдВрдЧрд╛ рдФрд░ jest.mock рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ: рд╕рднреА рднрдпрд╛рдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рджреВрд╕рд░реА рдмрд╛рдд: рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ jest.mock рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдирдХрд▓реА рдлрд╝рд╛рдЗрд▓ рдкреВрд░реЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИ рдЬреЛ рднреА рдирдХрд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЙрддреНрдерд╛рдкрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдХ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рджреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирдХрд▓реА рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреА рдирд╛рдЬреБрдХрддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рдЙрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдирдХрд▓реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдПрдлрдмреА рдЗрд╕ рд╕рд╛рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдХреИрд╕реЗ? ЁЯШЮ
+1 рдЗрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИред рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рд╡рд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ jest.mock ('src / utils / history') рд╣реИ, рддреЛ рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ 'history' node_module рдХрд╛ рднреА рдордЬрд╛рдХ рдЙрдбрд╝рд╛рддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?
@masoudcs рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛:
package.json
"jest": {
/* other settings ... */
"modulePathIgnorePatterns": ["<rootDir>/node_modules/react-native/Libraries/Core/__mocks__"]
}
modulePathIgnorePatterns
рд╕рд░рдгреА рдореЗрдВ "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ" рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдЪрд▓реА рдЬрд╛рдПрдЧреА
рдзрдиреНрдпрд╡рд╛рдж @brunolm
рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ, рд╕рд╣реА рд╣реИ ?!
рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХреБрдЫ рдмреБрд░рд╛ рди рд╣реЛ, рдпрд╛рдиреА рдХрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ index.js рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдпрд╛:
src/app/modules/module1/__mocks__/index.js
рдФрд░ src/app/modules/module2/__mocks__/index.js
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ рддреЛ рдпрд╣ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдХреЛ рд╣реА рд▓реЗрдЧрд╛ рдФрд░ рдпрд╣ рдХрд┐ рдореИрдВрдиреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рддреЛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рдпрд╣ рд╡реИрд╕реЗ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рд╣рд╛рдВ, рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛, рдФрд░ рд╣рдордиреЗ рдЕрдм рддрдХ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рд╡рд╣реА рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХрд░рдирд╛ рд╣реИ! :)
рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдпрд╣ рдЖрдЦрд┐рд░реА рджреЛ рдХреНрдпрд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд▓реЗрдХрд┐рди рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ред
jest.mock('dir/index', () => require('dir/__mocks_/index'));
рдореИрдВ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ GitBook ( ./_book
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдореЗрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ testPathIgnorePatterns: ['/_book/', ...otherStuff]
рд╣реЛред рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХрд┐рдорд┐рдВрдЧ, рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдХрдЯреМрддреА рдирд╣реАрдВ рджрд┐рдЦрддреА рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦрдирд╛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред
+1
рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?
рдЕрднреА рднреА рдПрдХ рдареАрдХ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ рддрд╛рдХрд┐ рдореЗрд░реА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдлреИрд╢рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗ, рди рдХрд┐ рдЕрдзрд┐рдХ рдЧрдВрджреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛ рдХрд┐ рдКрдкрд░ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
jest.mock('models/index', () => require('models/index/_mocks_/index'));
рд╣рдорд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ @dkundel рдХреЗ рд╕рдиреНрджрд░реНрдн рдХреЗ рд╕рдорд╛рди рд╣реА рджрд┐рдЦрддреА рд╣реИ рдпрд╣рд╛рдБ https://github.com/facebook/jest/issues/2070#issuecomment -301332202 index.js
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдореЙрдбрд▓ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдирд┐рд░реНрдпрд╛рддред
рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЪреБрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдпрд╛ рд╕рднреА рдореЛрдЬрд╝реЛрдВ рдХреЛ рдПрдХ рдлреНрд▓реИрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдирд╣реАрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдореЛрдХреНрд╕ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рд╣реИрдВ, рдФрд░ рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ
jest.mock('pages/index/components/Component', () => require('pages/index/components/Component/_mocks_/index'));
рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВред
рдХреЛрдИ рднреА рд╢рдмреНрдж?
@karomancer рдореИрдВрдиреЗ PR # 6037 рдЬрдорд╛ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЕрднреА рддрдХ, рдЗрд╕рдХрд╛ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдореИрдВ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣ рдореБрджреНрджрд╛ рд╕реБрдкрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдХреНрд▓реАрдирд░ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рд╣реЛрддрд╛ рд╣реИред
package.json
{
"jest": {
"setupFiles": [
"<rootDir>/test.mocks.ts"
]
}
}
/* test.mocks.ts */
// modules mocked before every test
// use `jest.unmock(...)` to undo for any single test case
const mockedModules = [
"./path/to/module1/index.ts",
"./path/to/module2/index.ts",
];
mockedModules.forEach((path) => {
const mockPath = path.replace(/\.ts$/g, ".mock.ts");
jest.mock(path, () => require(mockPath));
});
рдпрд╣ рдЖрдкрдХрд╛ рдЙрдкрд╣рд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ anything.ts
рдПрдХ рднрд╛рдИ рдмрдирд╛рдХрд░ anything.mock.ts
рдФрд░ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдореЗрдВ рдореВрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ test.mocks
рдХреЗ mockedModules
рд╕рд░рдгреАред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡реГрджреНрдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛?
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред jest.config.js рдореЗрдВ:
module.exports = {
// ...
modulePathIgnorePatterns: ["<rootDir>/.*/__mocks__"]
};
рдореИрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рджрд╛рдпрд░реЗ рдпрд╛ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред
@amccloud рдзрдиреНрдпрд╡рд╛рдж! рдЗрд╕рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ! рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡рд┐рд╡рд░рдгред
рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ helpers
рд╣реИред рд╕рд╣рд╛рдпрдХ parseNodeFromString
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред
рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ helpers
рдореЗрдВ рдмрдирд╛рдИ рд╣реИред рдлрд┐рд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдпрд╛ред рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг parseNodeFromString
рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд▓рдЧреЗ:
FAIL src/some_dir/bla/tests/SomeClass.test.js
тЧП Test suite failed to run
TypeError: (0 , _helpers.parseNodeFromString) is not a function
рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? @Amccloud рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд╕рд╣реА рд╣реИред
modulePathIgnorePatterns: ["<rootDir>/.*/__mocks__"]
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдиреЗ рдиреЛрдб рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдореЛрдХреНрд╕ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд░реВрдЯ __mock__ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛: "modulePathIgnorePatterns": ["<rootDir>/src/react/.*/__mocks__"],
ред рдЕрднреА рднреА рдпрд╣ рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдореВрд▓ рд╕реЗ рдкреВрд░реНрдг рдкрде рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдХрд▓реА рдХреЗрд╡рд▓ рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЖрдо рд╣реИ: users/helper.js
рдФрд░ posts/helper.js
ред рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рдХреБрдЫ рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪреЗрддрд╛рд╡рдиреА рдЫрд┐рдкрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред
рддреЛ рдкреАрдЖрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рд╕рд┐рд░реНрдл рдХреБрдЫ рд╣реИрдХреНрд╕?
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде Dist dir рдореЗрдВ рдирдХрд▓реА рдореЙрдбреНрдпреВрд▓ рдХреА рдирдХрд▓ рдХреА рдЧрдИ рдереАред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрд╣рд░реЗ рд░рдВрдЧ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрде / рдкреИрдЯрд░реНрди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред рдпрд╣ рдЕрднреА рднреА "typecript@^3.4.5" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╣рд░ рдЯреЗрд╕реНрдЯ рд░рди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдбрд┐рдо рдбрд╛рдпрд░ рдХреЛ "рд░рд┐рдорд░рдл рдбрд┐рд╕реНрдЯ" рд╕реЗ рд╕рд╛рдл рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
"test:unit": "npm run clean && stencil test --spec --snapshot",
рдореБрдЭреЗ рдЗрд╕рдХреА рд╣реИрдХ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрд░реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╣реБрдЖ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рдЖрдкрдХреА рдирдХрд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рддреАрди рд╕рдорд╛рдзрд╛рди рдпрд╛ рдкрд░рд┐рджреГрд╢реНрдп:
1, рдореИрдВ рдЕрдкрдиреЗ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдкрд░ рдЕрдкрдиреЗ рдРрдк рдХреЛ рджреЛ рдмрд╛рд░ рдПрдбрд┐рдЯ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рд╕реЗ рдкреЙрдб рдЗрдиреНрд╕реНрдЯреЙрд▓ / рдЕрдкрдбреЗрдЯ рдФрд░ рд░рд┐рдПрдХреНрд╢рди-рд░рди-рдЖрдИрдУрдПрд╕ рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рдореИрдВрдиреЗ Xcode рдореЗрдВ рдФрд░ рдЕрдкрдиреЗ рдРрдк рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ рдРрдк рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд┐рдпрд╛ рдФрд░ рд░рд┐рдПрдХреНрдЯ-рджреЗрд╢реА рд░рди-рдЖрдИрдУрдПрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рджреЛ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЛрдбреНрд╕_рдореЙрдбреНрдпреВрд▓реНрд╕ 0 рдореЗрд░реА рд╕реНрдХреНрд░реВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВред
2, рдХрднреА-рдХрднреА рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдореИрдХ рдкрд░ рд░реИрдВрдбрдо рдХреАрдЬ рджрдмрд╛рддрд╛ рд╣реВрдВ рддреЛ рдиреЛрдб_рдореЙрдбрд▓реНрд╕ рдХреЛ рдПрд╕рдЖрд░рд╕реА рдлреЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднреА рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рднреА рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдбреБрдкреНрд▓реАрдХреЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдлреЛрд▓реНрдбрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рд╣реИред
3, рдореИрдВ рдЕрдкрдирд╛ рдРрдк рддрдм рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдореИрдВрдиреЗ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдРрдк рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдРрдк рдХреЛ рджреЛрд╣рд░рд╛рд╡ рдХреЗ рд╕рд╛рде рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛, рдЬреЛ рддрдм рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдм рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ? рдХреИрдВрдЯ CRA рдореЗрдВ рдореЙрдбреНрдпреВрд▓рдкреИрдердЗрдЧреНрдиреЛрд░рдЯреИрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
3 рд╕рд╛рд▓ рдФрд░ 10 рдорд╣реАрдиреЗ
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЬреЗрд╕реНрдЯ рдХреЛ рдХреЗрд╡рд▓ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд╛рдордиреЗ рд▓рд╛рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░, рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛ, рддреЛ рдЬрд┐рд╕ рджреЗрд╡ рдиреЗ рдЗрд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕реЗ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред jest.config.js рдореЗрдВ:
рдореИрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рджрд╛рдпрд░реЗ рдпрд╛ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред