рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдХреАрдбрд╝рд╛
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдирд┐рд╖реНрдкрд╛рджрд┐рдд npm test
рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЧрдП рд╣реИрдВ; рд╣рд╛рд▓рд╛рдВрдХрд┐, npm test -- --coverage
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЧрд┐рдЯрд╣рдм рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рднрдВрдбрд╛рд░ рд╣реИ рдХрд┐ рд╣рдо npm install
рдФрд░ npm test
ред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЬреЗрд╕реНрдЯ рдФрд░ рдПрдВрдЬрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рдореЗрдВ [email protected]
рд╕реЗ [email protected]
рдФрд░ [email protected]
рд╕реЗ [email protected]
рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ node_modules
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╕рд╛рдл рдХрд░ рджрд┐рдпрд╛ред
рдореИрдВ npm test
рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдореИрдВ npm test -- --coverage
рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд┐рдлрд▓рддрд╛рдПрдВ рдПрдВрдЬрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдЙрдерд▓реЗ рдХрд┐рдП рдЧрдП рдПрдХ рдШрдЯрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд░реЗрдВрдбрд░ рдЯреНрд░реА рдореЗрдВ рдиреЛрдбреНрд╕ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП find(selector)
рдХрд░ рд░рд╣реА рд╣реИрдВред рдиреЛрдбреНрд╕ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ jest
рджреМрд░рд╛рди рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди jest --coverage
рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдкрдЧреНрд░реЗрдб рд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рдкрд░реАрдХреНрд╖рдг jest
рдФрд░ jest --coverage
ред
рд░реЗрдкреЛ: https://github.com/nsand/jest-coverage
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рд╣реЛрдВред
рдЬреЗрд╕реНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ --debug
рд╕рд╛рде рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
node @ v6.9.1
npm @3.10.8
OS macOS Sierra
jest version = 17.0.3
test framework = jasmine2
config = {
"coverageDirectory": "/Users/dev/workspaces/component-project/.gh-pages/coverage",
"moduleNameMapper": [
[
"^.+\\.(scss)$",
"/Users/dev/workspaces/component-project/lib/styleMock.js"
]
],
"rootDir": "/Users/dev/workspaces/component-project",
"name": "-Users-dev-workspaces-component-project",
"setupFiles": [
"/Users/dev/workspaces/component-project/node_modules/babel-polyfill/lib/index.js"
],
"testRunner": "/Users/dev/workspaces/component-project/node_modules/jest-jasmine2/build/index.js",
"transform": [
[
"^.+\\.jsx?$",
"/Users/dev/workspaces/component-project/node_modules/babel-jest/build/index.js"
]
],
"usesBabelJest": true,
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/46/446113_55dgdfk3jsptqtd2c0000gn/T/jest",
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"expand": false,
"globals": {},
"haste": {
"providesModuleNodeModules": []
},
"mocksPattern": "__mocks__",
"moduleDirectories": [
"node_modules"
],
"moduleFileExtensions": [
"js",
"json",
"jsx",
"node"
],
"modulePathIgnorePatterns": [],
"noStackTrace": false,
"notify": false,
"preset": null,
"resetMocks": false,
"resetModules": false,
"snapshotSerializers": [],
"testEnvironment": "jest-environment-jsdom",
"testPathDirs": [
"/Users/dev/workspaces/component-project"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
"testURL": "about:blank",
"timers": "real",
"transformIgnorePatterns": [
"/node_modules/"
],
"useStderr": false,
"verbose": null,
"watch": false,
"collectCoverage": true,
"cache": false,
"watchman": true
}
@dmitriiabramov рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ displayName
рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЗрд╕реНрддрд╛рдВрдмреБрд▓ рдЕрдиреНрдп рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдиреЛрдб рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдХреЛ рджреЗрддрд╛ рд╣реИ :( - @cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673
@nsand : рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ Icon
рдШрдЯрдХ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
import React from 'react';
const Icon = ({ name }) => (
<i className={`fa-icon fa-icon--${name}`}></i>
);
Icon.displayName = 'Icon';
export default Icon;
@rogeliog рдХрдорд╛рд▓ рд╣реИ! рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдерд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВрдиреЗ рд░реИрдкрд░ рдкрд░ children()
рдХрд╣рд╛, рддреЛ рдПрдХ рджреГрд╢реНрдп рдЕрдВрддрд░ рдерд╛ред
рдПрдирдкреАрдПрдо рдкрд░реАрдХреНрд╖рдг
[ { '$$typeof': Symbol(react.element),
type: [Function: Icon],
key: null,
ref: null,
props: [Object],
_owner: null,
_store: {} } ]
рдмрдирд╛рдо
рдПрдирдкреАрдПрдо рдкрд░реАрдХреНрд╖рдг --- рдХрд╡рд░реЗрдЬ
[ { '$$typeof': Symbol(react.element),
type: [Function],
key: null,
ref: null,
props: [Object],
_owner: null,
_store: {} } ]
рдЬрд╣рд╛рдВ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо npm test
ред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рдХреЗ рд╕рд╛рде рд╣рд╛рде рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж, @thymikee рдФрд░ @rogeliog!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ
displayName
рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП@nsand : рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛
Icon
рдШрдЯрдХ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛: