Jest: --рдХрд╡рд░реЗрдЬ рдлрд╝реНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЙрддреНрддреАрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рджрд┐рд╕ре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/jest

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдХреАрдбрд╝рд╛

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?

рдирд┐рд╖реНрдкрд╛рджрд┐рдд 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
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ 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;

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@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!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kentor picture kentor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stephenlautier picture stephenlautier  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

withinboredom picture withinboredom  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

benmccormick picture benmccormick  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mmcgahan picture mmcgahan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ