Jest: рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЬреВрди 2017  ┬╖  137рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/jest

рдпрджрд┐ рдЖрдкрдХреЛ console.log рдЖрдЙрдЯрдкреБрдЯ рдЧреБрдо рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рддреЛ рдХреГрдкрдпрд╛ Jest 24 рдЖрдЬрд╝рдорд╛рдПрдВ


рдЕрдВрдХ #2441 . рд╕реЗ рд╢рд╛рдЦрд╛рдХрд░рдг

@cpojer рдореБрдЭреЗ рдЗрд╕ рд╕реЗрдЯрдЕрдк (macOS) рдХреЗ рд╕рд╛рде рдХреЛрдИ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ:

$ node --version
v7.4.0

рдлрд╝рд╛рдЗрд▓реЗрдВ

package.json :

{
  "dependencies": {
    "@types/jest": "19.2.4",
    "jest": "20.0.4",
    "ts-jest": "20.0.6",
    "typescript": "2.3.4"
  }
}

__tests__/jestconfig.json :

{
  "rootDir": "../",
  "globals": {
    "__TS_CONFIG__": {}

  },
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js",
    "jsx",
    "json"
  ],
  "transform": {
    "\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
  },
  "testRegex": "__tests__/.*test_.*\\.(ts|tsx|js)$"

__tests__/test_foo.ts :

import {} from 'jest';

console.log('CONSOLE before test');
test('fail', () => {
  console.log('CONSOLE inside test');
  expect(true).toEqual(false);
  console.log('CONSOLE end of test');
})

__tests__/test_bar.js :

console.log('BAR CONSOLE before test');
test('fail', () => {
  console.log('BAR CONSOLE inside test');
  expect(true).toEqual(false);
  console.log('BAR CONSOLE end of test');
})

рдЙрддреНрдкрд╛рджрди

$ jest -c __tests__/jestconfig.json 
 FAIL  __tests__/test_foo.ts
  тЧП fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous> (__tests__/test_foo.ts:6:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

 FAIL  __tests__/test_bar.js
  тЧП fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous>.test (__tests__/test_bar.js:4:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

Test Suites: 2 failed, 2 total
Tests:       2 failed, 2 total
Snapshots:   0 total
Time:        1.379s
Ran all test suites.

рдПрдХрд▓ рдЬреЗрдПрд╕ рдкрд░реАрдХреНрд╖рдг:

$ jest -c __tests__/jestconfig.json __tests__/test_bar.js 
 FAIL  __tests__/test_bar.js
  тЧП fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous>.test (__tests__/test_bar.js:4:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

  тЬХ fail (7ms)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        0.596s, estimated 1s
Ran all test suites matching "__tests__/test_bar.js".

рдПрдХрд▓ рдЯреАрдПрд╕ рдкрд░реАрдХреНрд╖рдг:

$ jest -c __tests__/jestconfig.json __tests__/test_foo.ts 
 FAIL  __tests__/test_foo.ts
  тЧП fail

    expect(received).toEqual(expected)

    Expected value to equal:
      false
    Received:
      true

      at Object.<anonymous> (__tests__/test_foo.ts:6:16)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)

  тЬХ fail (116ms)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        1.27s
Ran all test suites matching "__tests__/test_foo.ts".

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

рдмрд┐рдирд╛ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХреЗ рджреЛ рд╕рд╛рд▓ рдиреЗ рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рдбреЗрд╡рд▓рдкрд░ рдмрдирд╛ рджрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж рдЯреАрдо рдЬреЗрд╕реНрдЯ!

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

@thymikee рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╣рдЯрд╛рдХрд░

рдореИрдВ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рдмрд┐рдирд╛ repro рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдБ

рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдб 7.4 рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдиреЛрдб 7.5.0, 7.10.0, 8.0.0 рдФрд░ 8.1.2 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВред рд╕рдорд╛рдкрди

@thymikee рдиреЛрдб 6 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдПрд▓рдЯреАрдПрд╕ рд░рд┐рд▓реАрдЬ рд╣реИ? (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рднреА рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдбреАрдмрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрд▓рдЯреАрдПрд╕ рд░рд┐рд▓реАрдЬ рддрдХ рд╕реАрдорд┐рдд рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)ред

v6.11.0 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЕрднреА рднреА console.log s рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЖрд╣, рдореИрдВ рдХреБрдЫ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдБред рдзрдиреНрдпрд╡рд╛рдж, @thymikee , рдореИрдВ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЬрд╛рдКрдВрдЧрд╛ред

рдореИрдВ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдиреЛрдб 7.3.0 рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ (рдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд▓рдд рд╕рдВрд╕реНрдХрд░рдг) рдФрд░ рдпрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред 8.1.1 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рд╣реЛ рдЧрдпрд╛ред

@thymikee - рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреИрд╕рд╛ рд╣реИ? ...рдореИрдВ рдЕрдкрдиреЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдиреЛрдб рдмрдЧ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╣реА рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдиреЛрдб v7.4.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬреЗрд╕реНрдЯ v19.0.2 рдХреЗ рд╕рд╛рде рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧрд┐рдВрдЧ рджреЗрдЦрддрд╛ рд╣реВрдВред рдмрд╕ рдЬреЗрд╕реНрдЯ рдХреЛ v20.0.4 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ (рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛) рдХрдВрд╕реЛрд▓ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдЕрдм рдкреНрд░рдХрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

@thymikee рддреЛ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдиреЛрдб 8.2.1 Winx64 + Jest 20.0.4 рдкрд░ рдХреЛрдИ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ

  console.log = s => {
    process.stdout.write(s + "\n");
  };

рдФрд░ рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред

@nowherenone рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд╡реАрдирддрдо рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬ jest@test рдкрд░ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

@thymikee рдиреЗ рдиреЛрдб 8.2.1 jest@test рдХреЗ рд╕рд╛рде рдмрд╕ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдоред console.log рдмрдпрд╛рди рд╣рдореЗрд╢рд╛ рдирд┐рдЧрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

@thymikee рд╕рдорд╕реНрдпрд╛ BufferedConsole рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реИ, рдЬрд╣рд╛рдВ рдХрдВрд╕реЛрд▓ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд▓реЛрдЧреЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдЦреЛрд▓рд╛ рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛: https://github.com/facebook/jest/pull/4157

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рд╕рдВрджреЗрд╢ рдмрдлрд╝рд░ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЬрдорд╛рдирдд (рдпрд╛ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдЖрджрд┐) рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реАрдзреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ --verbose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ - рдореБрдЭреЗ @cpojer (рд╣рд░ рдореБрджреНрджреЗ рдФрд░ рдкреАрдЖрд░ рдореЗрдВ рдореИрдВ рдЬрд╛рддрд╛ рд╣реВрдВ) рд╕реЗ рдмреЗрдХрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рд░ рдХрд┐рд╕реА рдкрд░ рд╕рдм рдХреБрдЫ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рдирд╣реАрдВ рд╣реИрдВред

рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ - рдпрджрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдореЗрд░рд╛ рдЙрддреНрддрд░ рд╣реИред рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪрд╛ рдЦреЛрдЬреЗрдВред

describe('index', () => {
  it('doesnt print anything', () => {
    console.log('Hellllooo');
    expect(true).toBe(true);
  });
});
$ yarn test -- src/__tests__/index.spec.js --verbose
yarn test v0.27.5
warning package.json: No license field
$ jest "src/__tests__/index.spec.js" "--verbose"
 PASS  src/__tests__/index.spec.js
  Index
    тЬУ doesnt print anything (2ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.969s, estimated 2s
$ jest "--version"
v20.0.4
$ node --version
v7.4.0

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рдиреЛрдб рд▓реНрдорд╛рдУ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ - рдХреНрдпрд╛ рдордЬрд╛рдХ рд╣реИ ЁЯШВ

@ nf071590 рд░рд┐рдкреНрд░реЛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдареАрдХ рдЙрд╕реА рдЬреЗрд╕реНрдЯ рдФрд░ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде repl.it рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://repl.it/KYLc/0

рдХреГрдкрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реЗрдЦреА рдмрдШрд╛рд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЧрдВрднреАрд░ рд░рд┐рдкреНрд░реЛ рдХреЗ рд╕рд╛рде рдЖрдПрдВред
рдЪреАрдпрд░реНрд╕!

screen shot 2017-08-24 at 17 39 59

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рд╕рдЪрдореБрдЪ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдпрд╛, рдФрд░ рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рдпрд╛, рдФрд░ рдпрд╣ рдореЗрд░реЗ рдореИрдХ рдкрд░ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдорд┐рдирдЯ рдкрд╣рд▓реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рдеред рджреЗрдЦреЛ:

screen shot 2017-08-24 at 4 38 11 pm

рдЬрдм рд╕реЗ рдореИрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд╣реВрдВ (рдиреЛрдб 8.4, рдЬреЗрд╕реНрдЯ 21.0.0-alpha.2), console.log рдПрд╕ _рдХрднреА-рдХрднреА_ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ рдпрджрд┐ рдЖрдк --verbose рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рдЧрд╛рддрд╛рд░ рджрд┐рдЦрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ рдЗрд╕рдХреЗ рд╕рд╛рдеред рдЬрдм рдореБрдЭреЗ рдПрдХ рдорд┐рдирдЯ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдиреЛрдб 7 рдФрд░ рд╕реНрдерд┐рд░ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрддреА рд╣реИред

рдпрд╣рд╛рдВ рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ред

describe('index', () => {
  it('doesnt print anything', () => {
    console.log('Hellllooo');
    expect(true).toBe(true);
  });
});
$ node --version
v7.4.0
$ jest "--version"
v21.1.0

screen shot 2017-09-21 at 14 34 32

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдб v8.7.0 (npm v5.4.2) рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдкреНрд░рдЬрдирди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдиреЛрдб v7.4.0ред рдореЗрд░реЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛, рдФрд░ console.log рдкреНрд░рд┐рдВрдЯ рдЕрдм рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ --verbose рдХреЗ рдмрд┐рдирд╛ рднреАред V7.4.0 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг-рд╕рдВрдмрдВрдзрд┐рдд рдФрд░ рдХреБрдЫ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЕрдм рдиреЛрдб v8.3.0 рдкрд░ рд╣реВрдВ, рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рдкрд╛рд╕ @ nf071590 рдХреЗ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдереЗ, рдФрд░ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ repl.it рдкрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдЕрдЬреАрдм рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╣реЛ рд░рд╣реА рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдиреЛрдб 8.9.0 рдФрд░ рдЬреЗрд╕реНрдЯ 21.2.1, macOS 10.12.6 (16G1036) рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

@SimenB рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдпрд╣рд╛рдВ рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдореМрдд рдХреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЬреЗрд╕реНрдЯ рдХреА рдмрд╣реБ-(рдмрдЪреНрдЪрд╛) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХреГрддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ console.logs рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рдмрд┐рдирд╛ рдЬреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдЬреЛ рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдЖрддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ --verbose рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ $#$2$# console.log рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдЙрд╕реЗ --watch рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд╛рд▓ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╡рд░реНрдмреЛрдЬрд╝ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред --watch рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдХрд░ рдЬреЛ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╡рд░реНрдмреЛрдЬрд╝ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреБрдЫ рдЦрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рд╕рднреА console.log рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рд╡рд░реНрдмреЛрдЬрд╝ рд╡рд┐рдХрд▓реНрдк рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдореИрдВрдиреЗ рдЕрднреА рдЕрдкрдиреЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЛ v6 рд╕реЗ v9 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореЗрд░реА рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╛рдЗрд▓ рд╕рд╛рдВрддреНрд╡рдирд╛ рджреЗ рд░рд╣реА рд╣реИред

рдореИрдВ рд╣рдлреНрддреЛрдВ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА --verbose рдХреЗ рд╕рд╛рде рдмрдиреА рд╣реБрдИ рд╣реИ рдЬрдм --forceExit рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ console.log рдЖрдЙрдЯрдкреБрдЯ stdout рдЬрдмрдХрд┐ рдЬреЗрд╕реНрдЯ stderr рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ --forceExit рддрдм рднреА stdout рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдлреНрд▓рд╢ рди рд╣реЛ

рдореБрдЭреЗ рдирд┐рдореНрди рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ ( --verbose рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛) рджреЛрдиреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░/рдпрд╛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреЛ рдмрдлрд╝рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд▓рд╛рдЗрд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдЖрджреЗрд╢
jest .... --forceExit --setupTestFrameworkScriptFile ./src/tests/jestShim.js

jestShim.js . рдХреА рд╕рд╛рдордЧреНрд░реА

const { Console } = require('console');
global.console = new Console(process.stderr, process.stderr);

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛- рдХрднреА рдирд╣реАрдВ рджреЗрдЦреЗрдВ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрднреАред

Node 9.80 Jest 22.4.2 Mac OS 10.13.3

рдпрд╣рд╛рдВ рд╕реБрдЭрд╛рдП рдЧрдП рдХрд╛рдордХрд╛рдЬ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХреГрдкрдпрд╛ рдПрдХ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ

@ledbit рдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛
рдПрдирдкреАрдПрдо 5.3.0
рдордЬрд╛рдХ 22.4.3

  • рдореИрдХ рдУрдПрд╕

рдореИрдВ рдЕрднреА рднреА рдПрдХ рдкреНрд░рдЬрдирди рдХреА рдЬрд░реВрд░рдд рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рд╣реВрдБред

--forceExit рдХреБрдЫ рдЯреВрдЯрд╛ рд╣реБрдЖ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛

[рдирд╡реАрдирддрдо рдЬреЗрд╕реНрдЯ v23.0.0, рдиреЛрдб v8.11.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП react-scripts рдлреЛрд░реНрдХрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛]

рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЬреИрд╕реЗ @@@ ) рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд░рдХреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛:

yarn test --verbose | grep '@@@'

рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рд╣реИрдХ рд╣реИ (рдЖрдк рд╕рднреА рдХрдВрд╕реЛрд▓ рд░рдВрдЧ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдФрд░ рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рдг рд╕рд╛рд░рд╛рдВрд╢ рджреЗрдЦрддреЗ рд╣реИрдВ) рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рд╣реИ рдЬреЛ рдЕрдм рддрдХ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП --verbose рддрд░реНрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдФрд░ рдЗрд╕реЗ --watch рдХреЗ рд╕рд╛рде --watch react-scripts рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИред рдореИрдВ рдиреЛрдб 10.1.0 рдкрд░ рдЬреЗрд╕реНрдЯ v22.4.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдРрдк рдХрд╛ рдкрд╣рд▓рд╛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдмрд╛рдХреА рд╕рднреА рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдЕрдкрдиреА рд▓реЙрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ stdout рдкрд░ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдХреБрдЫ рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╡реЗ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдЯреЗрд╕реНрдЯ рд░рдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХрд╛ рдХрд╛рдо рд╣рдореЗрдВ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд▓реЙрдЧ рдХреЗ рдмрд┐рдирд╛ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@thymikee рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ

@thanpolas рдмрдЧ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗрдВ :)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреГрдкрдпрд╛ рдЬреЗрд╕реНрдЯ 23 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╡реАрдирддрдо рд╣реИред

рдореБрдЭреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛, рд▓реЙрдЧрд┐рдВрдЧ рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдХрд┐ рд╕реНрдЯрдбрдЖрдЙрдЯ рдкрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрдм рдХрдВрд╕реЛрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЙрдЧ рдореИрдВ рд╕реНрдЯреНрд░реАрдо рд▓реЗрдЦрдХ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдиреЗ рд▓реЙрдЧ рднреЗрдЬрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдФрд░ iTerm2 рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЗрдЦрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯрдбрдЖрдЙрдЯ рдФрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рджреВ рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрдЧрд╛

рдпрд╣рд╛рдВ рдмрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рд╕реНрд░реЛрдд рд╣реИрдВ:

https://github.com/spion/jest-logging-repro

yarn install; yarn repro

рд╕реЗрдЯрдЕрдк: рдЬреЗрд╕реНрдЯ рд╡реЙрдЪ рдореЛрдб рдореЗрдВ рд╣реИ, рд╡рд░реНрдмреЛрдЬрд╝ рдлрд╝реНрд▓реИрдЧ рдЪрд╛рд▓реВ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рджреЛ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд: рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрдВрд╕реЛрд▓ рдХрд░реНрд╕рд░ рдХреЛ рдЧрд▓рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдЧрд▓рдд рдЬрдЧрд╣ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрд╡рд▓реЛрдХрди:

 RUNS  tests2/other-tests.js
 RUNS  lib/example.spec.js
 PASS  tests2/other-tests.js
  bar
    тЬУ always is true (17ms)

 PASS  lib/example.spec.js
  foo
    тЬУ adds 5 (5ms)

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.673s
Ran all test suites.

Watch Usage: Press w to show more.

рдЕрдЧрд░ рдореИрдВ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдиреЗрддреНрд░рд╣реАрди "RUNS" рдХреЛ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 PASS  lib/example.spec.js
  foo
    тЬУ adds 5 (5ms)

 PASS  tests2/other-tests.js
  bar
    тЬУ always is true (5ms)

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.597s
Ran all test suites.

Watch Usage: Press w to show more.

рдЕрдЧрд░ рдореИрдВ 3 рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ:

 PASS  lib/example.spec.js
  foo
    тЬУ adds 5 (5ms)


 RUNS  tests2/other-tests.js

Test Suites: 1 passed, 1 of 2 total
Tests:       1 passed, 1 total
Snapshots:   0 total
  console.log tests2/other-tests.js:5
    JEST

 PASS  tests2/other-tests.jsests.js:6
  bar
    тЬУ always is true (19ms)

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 totalTime:        1.788sRan all test suites.

Watch Usage: Press w to show more.

рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг:

30656 % node --version
v8.11.2

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @spion рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЕрдЪреНрдЫрд╛ рдЖрд╕рд╛рди рд░реЗрдкреЛред

рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб v8.11.1 LTS рдкрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ watch рдФрд░ watchAll рдореЛрдб рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдШрдбрд╝реА рдореЛрдб рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдареАрдХ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдиреЛрдб v10.6.0 рдФрд░ рдЬреЗрд╕реНрдЯ 23.4.1 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ

рд╣рд╛рдБ рдореИрдВ рднреАред рдмрд╕ рдкрд╛рдпрд╛ рдХрд┐ -w 1 рд▓реЙрдЧрд┐рдВрдЧ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ @spion рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдиреЛрдб 8.11.3
рдордЬрд╝рд╛рдХ 23.4.0

рдЬрдм рдореИрдВ рдлрд╝рд╛рдЗрд▓ рд░реЗрдЧреЗрдХреНрд╕ рдорд┐рд▓рд╛рди ( watch p рджрдмрд╛рддрд╛ рд╣реВрдВ) рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓ рд░рд╣реА рд╣реИред all рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рд▓реЙрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдореБрджреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдиреЛрдЯ --verbose рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИред

рдирдореВрдирд╛ 1

it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
    const fV = shallow(<FormValidator/>);
    console.log('r1');
    console.error('r2');
    console.error('r3');
    ...

all рджреЗрдЦрдиреЗ рдХреЗ рд╕рд╛рде ( log s рдФрд░ error s рджреЛрдиреЛрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ:

 PASS  src/components/__tests__/FormValidator.js
  тЧП Console

    console.log src/components/__tests__/FormValidator.js:56
      r1
    console.error src/components/__tests__/FormValidator.js:57
      r2
    console.error src/components/__tests__/FormValidator.js:58
      r3

file regex рдореЛрдб рдореЗрдВ (рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ log рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ error s):

Test Suites: 0 of 1 total
Tests:       0 total
Snapshots:   0 total
  console.log src/components/__tests__/FormValidator.js:56
    r1

 PASS  src/components/__tests__/FormValidator.jsidator.js:57
  FormValidator
    тЧЛ skipped 3 tests
  FormValidator.displayMessage
    тЬУ should display a ErrorMessage component if state.validated is 'error' (32ms)
    тЧЛ skipped 5 tests
  FormValidator.render
    тЧЛ skipped 1 test

рдирдореВрдирд╛ 2

it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
    const fV = shallow(<FormValidator/>);
    console.log('r1');
    console.error('r3');
    ...

all (рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ log рдФрд░ error рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ):

 PASS  src/components/__tests__/FormValidator.js
  тЧП Console

    console.log src/components/__tests__/FormValidator.js:56
      r1
    console.error src/components/__tests__/FormValidator.js:59
      r3

watch (рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдореБрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИ):

Snapshots:   0 total
 PASS  src/components/__tests__/FormValidator.jsator.js:56
  FormValidator
    тЧЛ skipped 3 tests
  FormValidator.displayMessage
    тЬУ should display a ErrorMessage component if state.validated is 'error' (20ms)
    тЧЛ skipped 5 tests
  FormValidator.render
    тЧЛ skipped 1 test

Test Suites: 1 passed, 1 total

рдирдореВрдирд╛ 3

it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
    const fV = shallow(<FormValidator/>);
    console.log('r1');
    console.log('r2');
    console.log('r3');
    console.log('r4');
    ...

all (рд╕рднреА рдЪрд╛рд░ log рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ):

 PASS  src/components/__tests__/FormValidator.js
  тЧП Console

    console.log src/components/__tests__/FormValidator.js:56
      r1
    console.log src/components/__tests__/FormValidator.js:57
      r2
    console.log src/components/__tests__/FormValidator.js:58
      r3
    console.log src/components/__tests__/FormValidator.js:59
      r4

watch (рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рджреЛ log s рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдореБрджреНрд░рд┐рдд рд╣реИрдВ):

Snapshots:   0 total
  console.log src/components/__tests__/FormValidator.js:56
    r1

  console.log src/components/__tests__/FormValidator.js:57
    r2

 PASS  src/components/__tests__/FormValidator.jsator.js:58
  FormValidator
    тЧЛ skipped 3 tests
  FormValidator.displayMessage
    тЬУ should display a ErrorMessage component if state.validated is 'error' (31ms)
    тЧЛ skipped 5 tests
  FormValidator.render
    тЧЛ skipped 1 test

Test Suites: 1 passed, 1 total

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЬреЗрд╕реНрдЯ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдХреНрд░рдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рджреЛрдиреЛрдВ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВред

node -v v8.11.2
jest -v 23.4.0

рдиреАрдЪреЗ рдореЗрд░реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдореЗрд░рд╛ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИредjson

```
"рдордЬрд╛рдХ": {
"transformIgnorePatterns": [
"/рдиреЛрдб_рдореЙрдбреНрдпреВрд▓/"
],
"рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": [
"/src/setupTests.js"
],
"рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рд╡рд░рдг": "jsdom",
"рдХреНрд░рд┐рдпрд╛": рд╕рдЪ,
"рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕": [
{
"рдбрд┐рд╕реНрдкреНрд▓реЗрдирд╛рдо": " рдШрдЯрдХ ",
"рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": [
"/src/setupTests.js"
],
"рдореЙрдбреНрдпреВрд▓рдкрд╛рде": ["/src/"],
"рдЯреЗрд╕реНрдЯрдореИрдЪ": ["/src/components/__tests__/ / .test.js"]},{"рдбрд┐рд╕реНрдкреНрд▓реЗрдирд╛рдо": " рд░реЗрдбреНрдпреВрд╕рд░ ","рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": ["/src/setupTests.js"],"рдореЙрдбреНрдпреВрд▓рдкрд╛рде": ["/src/"],"рдЯреЗрд╕реНрдЯрдореИрдЪ": ["/src/reducers/__tests__/ /.test.js"]
},
{
"рдбрд┐рд╕реНрдкреНрд▓реЗрдирд╛рдо": " рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ ",
"рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": [
"/src/setupTests.js"
],
"рдореЙрдбреНрдпреВрд▓рдкрд╛рде": ["/src/"],
"рдЯреЗрд╕реНрдЯрдореИрдЪ": ["/src/actions/__tests__/ */ .test.js"]
}
]
},

Here are my dependencies

"рдирд┐рд░реНрднрд░рддрд╛": {
"рдмреЗрдмреЗрд▓-рдХреЛрд░": "^6.26.3",
"рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ": "^23.4.0",
"рдмреЗрдмреЗрд▓-рд▓реЛрдбрд░": "^ 7.1.5",
"рдмреЗрдмреЗрд▓-рдкреНрд░реАрд╕реЗрдЯ-рдПрдирд╡реА": "^ 1.7.0",
"рдмреЗрдмреЗрд▓-рдкреНрд░реАрд╕реЗрдЯ-рд░рд┐рдПрдХреНрд╢рди": "^6.24.1",
"рдбреЙрдЯреЗрдирд╡": "^ 6.0.0",
"рдПрдХреНрд╕рдкреНрд░реЗрд╕": "^4.16.3",
"рдЬреЗрд╕реНрдЯ": "^ 23.4.0",
"рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛": "^16.4.1",
"рд░рд┐рдПрдХреНрд╢рди-рдбреЛрдо": "^16.4.1",
"рд░рд┐рдПрдХреНрд╢рди-рд░реЗрдбрдХреНрд╕": "^5.0.7",
"рд░рд┐рдПрдХреНрд╢рди-рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕": "1.1.4",
"рд░реЗрдбрдХреНрд╕": "^4.0.0",
"рд░реАрдЬреЗрдирд░реЗрдЯрд░-рд░рдирдЯрд╛рдЗрдо": "^0.12.0"
},

output from just running jest

рдкрд╛рд╕ рд░реЗрдбреНрдпреВрд╕рд░ src/reducers/__tests__/comments/index.test.js
SAVE_COMMENT (4ms) рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ
тЬУ рдЕрдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ

рдкрд╛рд╕ рдХреНрд░рд┐рдпрд╛рдПрдБ src/actions/__tests__/ index.test.js
рдЯрд┐рдкреНрдкрдгреА рд╕рд╣реЗрдЬреЗрдВ
тЬУ рдХрд╛ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рд╣реИ (1ms)
рдХреЗ рдкрд╛рд╕ рд╕рд╣реА рдкреЗрд▓реЛрдб рд╣реИ (1ms)

рдкрд╛рд╕ рдШрдЯрдХ src/components/__tests__/App/index.test.js
рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╕реВрдЪреА рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (5ms)
рдПрдХ рдХрдореЗрдВрдЯрдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (1ms)

рдкрд╛рд╕ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ src/components/__tests__/CommentBox/index.test.js
рдХрд╛ рдПрдХ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рд╣реИ (23ms)
рдореЗрдВ рдПрдХ рдмрдЯрди рд╣реИ (3ms)
рдкрд╛рда рдХреНрд╖реЗрддреНрд░
рдореЗрдВ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (9ms)
рдЬрдм рдлреЙрд░реНрдо рдЬрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯреЗрдХреНрд╕реНрдЯ рдПрд░рд┐рдпрд╛ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (5ms)

рдкрд╛рд╕ рдШрдЯрдХ src/components/__tests__/CommentList/index.test.js
тЬУ рдкреНрд░рддрд┐ рдЯрд┐рдкреНрдкрдгреА рдПрдХ LI рдмрдирд╛рддрд╛ рд╣реИ (32ms)

рдЯреЗрд╕реНрдЯ рд╕реВрдЯ: 5 рдЙрддреНрддреАрд░реНрдг, рдХреБрд▓ 5
рдЯреЗрд╕реНрдЯ: 11 рдЙрддреНрддреАрд░реНрдг, рдХреБрд▓ 11
рд╕реНрдиреИрдкрд╢реЙрдЯ: рдХреБрд▓ 0
рд╕рдордп: 3.79s
3 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЪрд▓рд╛рдПрдВред
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ src/components/__tests__/CommentList/index.test.js:26
0

рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ src/components/__tests__/CommentList/index.test.js:27
рдкрд░реАрдХреНрд╖рд╛

```

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЬреЗрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рднреА рдирд┐рдЧрд▓ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдореЗрд░рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ:

тЖТ рдиреЛрдб --рд╕рдВрд╕реНрдХрд░рдг
v8.11.3

тЖТ рдПрдирдкреАрдПрдХреНрд╕ рдЬреЗрд╕реНрдЯ --рд╡рд░реНрдЬрди
23.4.1

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдл рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

// console.test.js
describe('jest should console output', () => {
  test('should console.log output be print', () => {
    console.log('console.log')
    expect(1).toBe(1)
  })

  test('should console.error output be print', () => {
    console.error('console.error')
    expect(1).toBe(1)
  })

  test('should console.info output be print', () => {
    console.info('console.info')
    expect(1).toBe(1)
  })
})

рдЖрдЙрдЯрдкреБрдЯ:

image

рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ:

{
  "globals": {
    "API_SERVER_PLACEHOLDER": "SOME_API_ADDRESS"
  },
  "moduleFileExtensions": [
    "js",
    "jsx"
  ],
  "transform": {
    "^.+\\.jsx?$": "babel-jest"
  },
  "moduleNameMapper": {
    "\\.(css|less|sass|scss|png)$": "<rootDir>/__mocks__/styleMock.js",
    "\\.(gif|ttf|eot|svg|png)$": "<rootDir>/__mocks__/fileMock.js"
  }
}

рдореЗрд░реА рд╡реГрддреНрддрд┐ рдиреЗ рдореБрдЭреЗ verbose рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд

рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 23.4.1 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде verbose рдХреЛ true $ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдЧрд▓ рдЬрд╛рдПрдЧрд╛ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ stdout рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡: https://github.com/noscripter/jest/pull/1

рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ ?! рдпрд╣ рдХреНрдпреЛрдВ рдЯреВрдЯрддрд╛ рд░рд╣рддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ:

expect(str).toBe("not this");

рдореИрдВ

рдпрджрд┐ рдЖрдкрдХреЗ package.json рдореЗрдВ verbose: true рд╣реИ, рдпрд╛ рдЖрдк рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде --verbose (рдпрд╛ рджреЛрдиреЛрдВ?) рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдпрд╣ рдЕрдм рдФрд░ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЕрдХреНрд╕рд░ рдПрдХ рджреВрд╕рд░реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ _before_ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ 4-5 рдмрд╛рд░ console.log рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдЕрдВрддрд┐рдо рд▓реЙрдЧ рдЖрдзрд╛ рд░рд╛рд╕реНрддреЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдЫрдорд╛рд╣реА рд╣реЛрдЧреА рдЕрдВрддрд┐рдо рдореБрджреНрд░рд┐рдд рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ)ред

рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рднреА рдмрд╣реБрдд рдХрдард┐рди рд╣реИред рдХрднреА-рдХрднреА рдПрдХ рдпрд╛ рджреЛ console.log s рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗ, рдЬрдмрдХрд┐ рджреВрд╕рд░реА рдмрд╛рд░ рдореБрдЭреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреАрди рд╕реЗ рдкрд╛рдВрдЪ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореЗрд░реЗ рд▓реЙрдЧ рдЙрд╕ рдХреЛрдб рдореЗрдВ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрд╡рдпрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рд▓реЙрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдлрд┐рд░ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рд▓реЙрдЧ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓реЙрдЧ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

console.log рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рддреЗ рд╣реИрдВ

yarn test <your-test-file-name>

рдЬреИрд╕реЗ
yarn test FormValidator

рдПрдлрд╡рд╛рдИрдЖрдИ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд░реЗрдкреНрд░реЛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:

script -qfc 'yarn repro' /dev/null > raw.log

рд╡рд╣ zsh - рдЖрдк рдмреИрд╢ рдореЗрдВ script -qfce рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ

рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рд▓реЙрдЧ рдХреЛ cat -vet raw.log рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:

^[[2K^[[1G^[[1myarn run v1.7.0^[[22m^M$
^[[2K^[[1G^[[2m$ jest --watch^[[22m^M$
^[[2J^[[3J^[[H^[[1m^[[2mDetermining test suites to run...^[[1m^[[22m^[[999D^[[K^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[0m^[[7m^[[1m^[[32m PASS ^[[39m^[[22m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A  foo^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A    ^[[32mM-bM-^\M-^S^[[39m ^[[2madds 5 (4ms)^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests:       ^[[22m0 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^[[999D^[[K  ^[[2mconsole.log^[[22m ^[[2mtests2/other-tests.js:5^[[22m^M$
    JEST^M$
^M$
^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[0m^[[7m^[[1m^[[32m PASS ^[[39m^[[22m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A  bar^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A    ^[[32mM-bM-^\M-^S^[[39m ^[[2malways is true (15ms)^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[999D^[[K^[[1mTest Suites: ^[[22m^[[1m^[[32m2 passed^[[39m^[[22m, 2 total^M$
^[[1mTests:       ^[[22m^[[1m^[[32m2 passed^[[39m^[[22m, 2 total^M$
^[[1mSnapshots:   ^[[22m0 total^M$
^[[1mTime:^[[22m        1.128s^M$
^[[2mRan all test suites^[[22m^[[2m related to changed files^[[22m^[[2m.^[[22m^M$
^M$
^[[1mWatch Usage^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22ma^[[2m to run all tests.^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22mf^[[2m to run only failed tests.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m p ^[[2mto filter by a filename regex pattern.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m t ^[[2mto filter by a test name regex pattern.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m q ^[[2mto quit watch mode.^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22mEnter^[[2m to trigger a test run.^[[22m^M$

рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рдХреА рдЧрд▓рдд рдЧрдгрдирд╛ рд╣реИред

рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 PASS  lib/example.spec.js
  foo
    тЬУ adds 5 (4ms)


 RUNS  tests2/other-tests.js

 PASS  tests2/other-tests.js2 total
  bar
    тЬУ always is true (15ms)

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.128s
Ran all test suites related to changed files.

Watch Usage
 тА║ Press a to run all tests.
 тА║ Press f to run only failed tests.
 тА║ Press p to filter by a filename regex pattern.
 тА║ Press t to filter by a test name regex pattern.
 тА║ Press q to quit watch mode.
 тА║ Press Enter to trigger a test run.

рдХрдВрд╕реЛрд▓ рд▓рд╛рдЗрди рдЧрд╛рдпрдм рд╣реИ, рдФрд░ рдкрд╛рд╕ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдмрд╣реБрдд рдиреАрдЪреЗ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдХрдВрд╕реЛрд▓ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдЯрд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдгред "рдкрд╛рд╕" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдЬрд╛рдиреЗ рдкрд░ рд▓реЙрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрд╕рд╛рди рдЦреЛрдЬ рдФрд░ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд╛рд░рд╛рдВрд╢ рдХреЛ рдПрдХ рд╕рд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛: https://gist.github.com/spion/bbb34c5abc1230a37ad5f4f01336b8df

рдкреАрдПрд╕ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреБрдЫ рдЬрдмрд░рджрд╕реНрддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрдм рдЖрдк рд╡реЙрдЪ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП "рдП" рдХреЛ рджрдмрд╛рдХрд░ рд░рдЦреЗрдВ - рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд▓рдЧреЗрдВрдЧреЗ (рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдФрд░ рд╕рдордп рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ)

рдореИрдВ рднреА рднреВрд▓ рдЧрдпрд╛ - рдореИрдВ рдЙрдмрдВрдЯреВ рдмрд╛рдпреЛрдирд┐рдХ рдкрд░ рд╣реВрдВ, рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ рдбрдмреНрд▓реВрдЖрд░рдЯреА рдЯрд░реНрдорд┐рдирд▓ рд╡реНрдпрд╡рд╣рд╛рд░:

% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

рдореИрдВ рднреАред @spion рдиреЗ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рднреБрдирд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдЦреЛрдЬрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдзреАрдореЗ, рдПрд╕рд┐рдВрдХ рдХреЛрдб рдкрд░ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдореИрдВ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдо рд╕рд╛рд░рд╛рдВрд╢ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ [email protected] рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рд╕рд╛рд░рд╛рдВрд╢ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде [email protected] рдореЗрдВ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╣реЛ рд░рд╣реА рдереАрдВред

рдЕрджреНрдпрддрди - рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдиреНрдпреВрдирддрдо рдкреИрдЪ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдкреНрд░рдЧрддрд┐ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ рдкрддреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рд╕реНрдерд┐рддрд┐ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмреАрдЪ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛

рдЬреЗрд╕реНрдЯ рдмрдВрджрд░-рдкреИрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ stderr рдФрд░ stdout рдзрд╛рд░рд╛рдУрдВ 'рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗред рд╡рд╣ рд▓реЗрдЦрдХ jest-cli Status.js рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп рдЖрджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЬрдм рднреА рдЙрд╕ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдХреЛрдИ рд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП "рд╣рдЯрд╛рдПрдВ" рдирд┐рд░реНрджреЗрд╢ (рдПрдПрдирдПрд╕рдЖрдИ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реИ), рдореВрд▓ рд▓реЗрдЦрди, рдФрд░ "рд╕реНрдерд┐рддрд┐ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ" рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рднреНрд░рдо рдХрд┐ рд╕реНрдерд┐рддрд┐ рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░реАрди рдХреЗ рдиреАрдЪреЗ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рдкрд╛рда рдЗрд╕рдХреЗ рдКрдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИред

(рдмреЗрд╢рдХ, рдпрд╣ рдЙрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реЛрд╢рд┐рдпрд╛рд░ рд╣реИ - рд░рд╛рдЗрдЯреНрд╕ рдмрдлрд╝рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрдлрд╝рд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╣рд░ 100ms рдореЗрдВ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд░реАрдХреНрд╖рдг рдзрд╛рд╡рдХ (рдШрдбрд╝реА рдореЛрдб рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд, рдЬреЛ runInBand рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдЕрдиреНрдп рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЙрди рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ stdio рд╕реНрдЯреНрд░реАрдо рдХреЛ "рд╡рд┐рд░рд╛рд╕рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЪ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ! рдпрджрд┐ рд╡реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╣реЛрдВрдЧреЗ

  1. рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ (рд╕реНрдерд┐рддрд┐ рдорд┐рдЯрддреА рдирд╣реАрдВ рд╣реИ)
  2. рдЕрдЧрд▓реА рд╕реНрдерд┐рддрд┐ рдорд┐рдЯрд╛рдиреЗ рдкрд░ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рднреА рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд┐рдЯрд╛рдирд╛ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдкреБрд░рд╛рдиреА рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИ)

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрди рдЯреНрдЯреА рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ "рд╡рд┐рд░рд╛рд╕рдд" рдореЛрдб рд╕реЗ "рдкрд╛рдЗрдк" рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдзреЗ рдореБрдЦреНрдп stdout/stderr рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╣рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

diff --git a/packages/jest-runner/src/index.js b/packages/jest-runner/src/index.js
index 2f4dd724..618a8cbf 100644
--- a/packages/jest-runner/src/index.js
+++ b/packages/jest-runner/src/index.js
@@ -97,11 +97,14 @@ class TestRunner {
     // $FlowFixMe: class object is augmented with worker when instantiating.
     const worker: WorkerInterface = new Worker(TEST_WORKER_PATH, {
       exposedMethods: ['worker'],
-      forkOptions: {stdio: 'inherit'},
+      forkOptions: {stdio: 'pipe'},
       maxRetries: 3,
       numWorkers: this._globalConfig.maxWorkers,
     });

+    worker.getStdout().pipe(process.stdout);
+    worker.getStderr().pipe(process.stderr);
+
     const mutex = throat(this._globalConfig.maxWorkers);

     // Send test suites to workers continuously instead of all at once to track

рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рдЗрдк рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрдВрджрд░-рдкреИрдЪ рд▓рд┐рдЦрдиреЗ рдХреЛ рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд╛рдкрддрд╛ рд░рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВред рдХрд╛рдо

diff --git a/packages/jest-worker/src/worker.js b/packages/jest-worker/src/worker.js
index 5eee64af..5e5126eb 100644
--- a/packages/jest-worker/src/worker.js
+++ b/packages/jest-worker/src/worker.js
@@ -94,6 +94,8 @@ export default class {
         {
           cwd: process.cwd(),
           env: Object.assign({}, process.env, {
+            // $FlowFixMe: Does not know about isTTY
+            FORCE_COLOR: process.stdout.isTTY,
             JEST_WORKER_ID: this._options.workerId,
           }),
           // Suppress --debug / --inspect flags while preserving others (like --harmony).

рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ:

Test Suites: 51 failed, 232 passed, 283 total
Tests:       149 failed, 7 skipped, 2706 passed, 2862 total
Snapshots:   19 failed, 17 obsolete, 996 passed, 1015 total

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ - рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХрд╛рдлреА рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдм рд╕реНрдЯреЗрдЯрд╕ рдЕрдкрдбреЗрдЯ рдЬреБрдбрд╝ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдПрдХ рд╕рдлрд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рдмрд╛рдж, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рдлреНрд▓рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдб рдХрд╛ рдореБрджреНрджрд╛ рднреА рд╣реИред

рдХреГрдкрдпрд╛ рдареАрдХ рдХрд░реЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ

рдЬреЗрд╕реНрдЯ@22.4.3 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --env рдиреЛрдб рд╕реЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рд▓реЙрдЧрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ 3-4 рдмрд╛рд░ рд▓реЙрдЧ рдХрд░рдирд╛ рд╣реИред рдЬреЗрд╕реНрдЯ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╣реА рдмреНрд▓реЙрдХ рдХрд░реЗрдЧрд╛ред рдЕрднреА рднреА рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? рдореИрдВ рдЬреЗрд╕реНрдЯ 23.4.1 рдФрд░ рдиреЛрдб 9.11.1 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХрднреА-рдХрднреА рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХрднреА-рдХрднреА рдирд╣реАрдВред

рдмрд┐рдирд╛ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХреЗ рджреЛ рд╕рд╛рд▓ рдиреЗ рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рдбреЗрд╡рд▓рдкрд░ рдмрдирд╛ рджрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж рдЯреАрдо рдЬреЗрд╕реНрдЯ!

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИред рдорд╛рдорд▓рд╛ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реИ?

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдХреМрди рдХрднреА рднреА рдЕрдкрдиреЗ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛, рд╣реИ рдирд╛?

рдЬреИрд╕реЗ @jonogilmour рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдмрд╛рд░ рдХреБрдЫ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреАрдЬреЛрдВ рдХреЛ рджреЛ рдмрд╛рд░ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

FWIW, --verbose=false рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ package.json :

"scripts": {
...
    "test": "react-scripts test --env=jsdom --verbose=false",

рдХреБрдЫ рдЕрдиреНрдп рдЕрд╡рд▓реЛрдХрди:

  • --env=jsdom (рдореЗрд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ) рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдпрд╣ --verbose=false рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред
  • рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕реАрдзреЗ рдордЬрд╛рдХ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдирд╛ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ) рдиреЗ рднреА рдЗрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред
  • рдЬрдм рдХреЛрдИ рдЕрднрд┐рдХрдерди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдордЬрд╝рд╛рдХ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдмрд╣реБрдд рд╕реЗ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рднреА рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд╣реИрд▓реЛ рджреЛрд╕реНрддреЛрдВ/рд▓рдбрд╝рдХрд┐рдпреЛрдВ,
--рд╡реЙрдЪ рдореЛрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╕рдордп рдореИрдВ рдкреНрд░рд╕рд┐рджреНрдз рдЬреЗрд╕реНрдЯ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рднреА рдорд┐рд▓рд╛ред
рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди --watch рдХреЗ рдмрдЬрд╛рдп --watchAll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдмрджрд╕реВрд░рдд рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд▓реЙрдЧ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рджрд┐рдЦрд╛рдИ рджрд┐рдПред

рдореИрдХреЛрдЬрд╝ рд╣рд╛рдИ рд╕рд┐рдПрд░рд╛
рдиреЛрдб v8.11.3
рдордЬрд╝рд╛рдХ: 23.6.0
рдЯреАрдПрд╕-рдЬреЗрд╕реНрдЯ: 23.10.4

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ beforeAll рдореЗрдВ

  console.log = s => {
    process.stdout.write(s + "\n");
  };

рдФрд░ рдпрд╣ рдЦреЛрд▓ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛:

yarn test > test.log

рдореЗрд░реЗ рд▓рд┐рдП, mocha рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдпрд╣ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреАрдПрд╕рдПрд▓ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИред рдЖрдк рдЬреЗрд╕реНрдЯ рдХреА рдЙрдореНрдореАрдж-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://www.npmjs.com/package/expect

рдпрд╣ рд▓рдЧрднрдЧ jest рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ mocha $ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдкреИрдо рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИред

рдпрд╣ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╣рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХрд╛рд╢ рдЕрдиреБрд░рдХреНрд╖рдХ рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрд╕реНрдЯ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рд╣реА рд╣реИ?

рд╡реИрд╕реЗ рднреА, рдореИрдВ рдЕрдм рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

export const log = (s: any) => {
    console.log(s);
    console.log(s);
    console.log(s);
    process.stdout.write(s + "\n");
};

рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рд╕реНрдкреИрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ --verbose=false рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред

--verbose=false рд╕рдВрд╕реНрдХрд░рдг 23.6.0 рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдУрдПрдордЬреА рдпрд╣ рдПрдХ рджрд░реНрдж рд╣реИ:/рдирд╡рдВрдмрд░ 2018

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ

silent: false рдХреЛ jest.config.js рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ... рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдиреЗ рдореЗрд░реА рдорджрдж рдХреА

рдХреЛрдИ рднреА рдЙрдкрд╛рдп рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред
рдиреЛрдбрдЬреЗрдПрд╕: v8.12.0
рдЬреЗрд╕реНрдЯ: v23.4.1

рдореИрдВ рдорд╣реАрдиреЛрдВ рд╕реЗ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдЬрдмрдХрд┐ рдпрд╣ рдмрдЧ _рд╕реБрдкрд░ рдХрд╖реНрдЯрдкреНрд░рдж_ рд╣реИ, рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдЬрд┐рд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдЬрдВрдХ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╣рд░ рдмрд╛рд░ рдХрдВрд╕реЛрд▓ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг, рдирдХрд▓реА рдХреЙрд▓ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп:

expect('hello').toEqual(childFunc.mock.calls[0]) рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ:

screen shot 2018-11-27 at 10 26 44 am

рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдПрдХ --рдШрдбрд╝реА рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 23.5.0
рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг 8.11.3

рдпрд╣ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдЪрд▓ рд░рд╣реЗ "рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рджреВ" рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЬрдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдореВрд╣ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдЧреБрдо рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдбреЗрдврд╝ рд╕рд╛рд▓ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдореИрдВ

рдЙрдкрд░реЛрдХреНрдд рдмрд╛рддреЛрдВ рд╕реЗ рд╕рд╣рдордд - рдпрд╣ рдХрд╛рдлреА рд╢реЛрд╕реНрдЯреЙрдкрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреЗрд╕реНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджрд░реНрджрдирд╛рдХ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред

рдореЗрд░рд╛ "рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб" рдпрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрд░реНрдХ log4js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрд╣рд╛рдВ рдореИрдВ рдЬреЗрд╕реНрдЯ рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЛрдб рдкрд░ рдореЛрдбрд╝рддрд╛ рд╣реВрдВ, рдореИрдВ рдЕрдЪреНрдЫрд╛ рд╣реВрдВред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЛрдб рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ console.log рдХреА рдЪрд╛рд░ рдкреНрд░рддрд┐рдпрд╛рдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрддрдГ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдЬрд╛рдирдХрд╛рд░реА рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП expect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рднреАрддрд░ рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ logjest рдЬреИрд╕реЗ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рд╡рд╣ рдЬрдм рднреА рдЖрдкрдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреЛрджрдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рднреАрддрд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ CI=true yarn run test ?

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЬреЛ рдХрд╣рд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рдмрд┐рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, "--verbose" рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ --verbose рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрд╡рд░реВрдкрдг рдХрд░рддрд╛ рд╣реИ рдФрд░ stdout рд╕реНрдЯреНрд░реАрдо рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЭреЗ 2 рдорд╣реАрдиреЗ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ npm рдХрдорд╛рдВрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреИрд╕реЗ: npm рд░рди рдЯреЗрд╕реНрдЯ: рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди - --watchAll --verbose --coverage --etc

рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧ [email protected] рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ #6871

@jamesta696 рд╣рд╛рдп, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ "рдЬреЗрд╕реНрдЯ" рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ "рдореБрджреНрджреЛрдВ" рдХреЗ рд▓рд┐рдП рд╣реИ, рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИред
рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рднреА рдордЬрд╛рдХ рдХрд╛ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

@SimenB рдореИрдВрдиреЗ рдЬреЗрд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ (рдЖрдкрдХреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ) рдФрд░ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ console.log рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдереАред рдЕрдм рддрдХ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ: рд╕рднреА console.log s рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдФрд░ рдЕрдЧрд░ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред

рдПрдлрд╡рд╛рдИрдЖрдИ: рдореИрдВ jest --watchAll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ (рдФрд░ рдЕрднреА рднреА рд╣реВрдВ)

@tobyhinloopen @SimenB рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдЧрддрд┐ рдХрд╛ рдкреНрд░рдорд╛рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреВрд▓ред

рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИ @tobyhinloopen!

рдореИрдВ рдпрд╣ рднреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ [email protected] рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдмрд┐рдирд╛ --verbose=false рдХреЗ рд╕рднреА рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣ рднреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ [email protected] рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдмрд┐рдирд╛ --verbose=false рдХреЗ рд╕рднреА рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

+1ред рдкреБрд╖реНрдЯрд┐ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо, рдЬреЗрд╕реНрдЯ рджреЛрд╕реНрддреЛрдВ! рдореИрдВ

рдореИрдВ рднреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ! рдпрд╣ рдХреНрд░рд┐рд╕рдорд╕ рдХреА рддрд░рд╣ рд╣реИред рдореИрдВ

рдореИрдВ

рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдЕрдкрдбреЗрдЯ рддрдХ рдмрд╕ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ

рдореИрдВ рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 24.0.0 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рдореИрдВ рдЕрднреА рднреА console.log рдпрд╛ console.error рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдирдХрд╛ рдордЬрд╛рдХ рдирд╣реАрдВ рдЙрдбрд╝рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпреЗ рд╡рд╛рдХрдИ рдЕрдЬреАрдм рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ async рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ред рднрд▓реЗ рд╣реА try/catch рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реЛ, рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред

рдкреИрд░рд╛рдореАрдЯрд░ generator рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ, рдЕрдЧрд░ рдореИрдВ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИред рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рджреЗрддрд╛ рд╣реИред

image

рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 24.0.0 рд╣реИ, рдиреЛрдб 10.5 рд╣реИ

@tiborsaas рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╕рдВрднрд╡рддрдГ console.log рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЖрдк changedGenerators рд╕реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

await Promise.all(changedGenerators.map(async (generator) => {/* ... */}))

рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдХреБрдЫ рддреНрд░реБрдЯрд┐ console.log рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИред рдПрдХ рдФрд░ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ console.log рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ forEach рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдбрд┐рдмрдЧрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рд╣реИ

const archives = await fs.readdir(archiveDir);

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдордЬрд╝рд╛рдХ рдореБрджреНрджрд╛ рдЪреАрдЬреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдореИрдВ рдмрд╛рддрдЪреАрдд рдХреЛ рдкрдЯрд░реА рд╕реЗ рдирд╣реАрдВ рдЙрддрд╛рд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

рдЖрдк рдЕрднреА рднреА рдПрдХ рдмрдЧ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд╕ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдкрдирд╛ рд╕рдЯреАрдХ рдХреЛрдб рдЬрд╛рдиреЗ рдмрд┐рдирд╛) рдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрд┐рдирд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдлреЛрд░реНрдХ рдХрд░рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: )

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ expect рдХреЙрд▓ рдХреЛ forEach рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрд┐рддрдиреЗ рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ Promise.all рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рдХреБрдЫ рднреА рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдЖрдкрдиреЗ forEach рдХреЗ рдмрдЬрд╛рдп forEach map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛? рдмрд┐рдВрджреБ Promise.all . рдХреЗ рд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ

@SimenB рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИред

image

рдЕрдЧрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред

@tiborsaas рдЖрдк Promise.all рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: await Promise.all(...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╡рд╣ рднреА рдХрд┐рдпрд╛, рд╡рд╣реА рдкрд░рд┐рдгрд╛рдоред :(

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ promise.all $ рдХреЗ рдиреАрдЪреЗ await new Promise((resolve) => setTimeout(resolve, 1000)) рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдЖрдк рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдУрдкреА рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ (рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдПрд╕рд┐рдВрдХ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП)

рд╣рд╛рдБ рдпрд╣ рд╡рд╛рдХрдИ рдЕрдЬреАрдм рд╣реИ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣

test('stuff', () => {
    setTimeout(() => console.log('hi', 500));
})

рдЖрдорддреМрд░ рдкрд░ рдЕрднреА рднреА рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдореБрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ

рд╡рд╣ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ Promise.all([...], callback) рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрд╕реЗ Promise.all([...]).then(callback) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .all рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рд▓реЙрдЧ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ)ред @tiborsaas

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

рд╣рд╛рдБ рдпрд╣ рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЕрднреА рднреА рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП

@SimenB рдирд╣реАрдВ, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

> Promise.all([Promise.resolve(true)], () => console.log("hi")).then(console.log, console.error);
Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function: debugDomainError] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }
// output:
// [ true ]



рд╣рд╛рдБ, рдЗрд╕рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред Thx @tobyhinloopen

const lol = await Promise.all(versions); рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА рдореВрд▓ forEach рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред рддреЛ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреНрд░реБрдЯрд┐ рд╣реИ

рдкреАрдЖрд░: # 7731

рдореИрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://www.npmjs.com/package/debug рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рд╡рд╣ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдирд╣реАрдВ, рдЬрдм рддрдХ рд╣рдо #6524 рдирд╣реАрдВ рдХрд░рддреЗред

рдореИрдВ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ debug рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдФрд░ console.log рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдХрдВрд╕реЛрд▓ рд╕рдВрджреЗрд╢ рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореБрджреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ # 7731 рдХреЗ рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВред рдпрд╣ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рдд: рд╕рднреА рдЕрдиреБрдкрд▓рдмреНрдз рдХрдВрд╕реЛрд▓ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдпрд╣рд╛рдВ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред

--verbose рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред --verbose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдВрджреЗрд╢ рдЦреЛ рдирд╣реАрдВ рдЧрдП рдереЗред рдореИрдВ рдиреЛрдб v10.15.3 рдФрд░ рдЬреЗрд╕реНрдЯ v21.2.1 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрддреЗ рд╣реИрдВ

рдмреНрд▓реЙрдЧ рдореЗрдВ рдирд╡реАрдирддрдо рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрдВрддрддрдГ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ, рдореЗрд░реЗ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХрднреА-рдХрднреА рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдореИрдВ jest v24.8.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдФрд░ рдореЗрд░рд╛ рдХрд╛рдо рдареАрдХ тАНтЩВя╕П рд╣реИред рдХреГрдкрдпрд╛ рдПрдХ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЬрд╛рджреВрдЧрд░ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рдЖрдкрдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рд▓реЙрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдПрдкреАрдЖрдИ рдкрд░реАрдХреНрд╖рдг (рдЬреИрд╕реЗ рд╕реБрдкрд░рдЯреЗрд╕реНрдЯ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЙрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдкреЗрдХреНрд╖рд┐рдд :/

@thymikee рдпрд╣ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рд╡рд╛рдХрдИ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдЪрд▓рддрд╛ рд╣реИ (рд╡рд┐рдХрд▓реНрдк p)

  • console.log('pantz') (рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
  • рдХрдВрд╕реЛрд▓ рдмрджрд▓реЗрдВред рд▓реЙрдЧ (myObject) (рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ)
  • рдЗрд╕реЗ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓реЗрдВ (рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛)
  • рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрджрд▓реЗрдВред рд▓реЙрдЧ ('рдкреИрдВрдЯрдЬрд╝') (рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ)
  • рдЗрд╕рдореЗрдВ рдлрд┐рдЯ рдмрджрд▓реЗрдВ (рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛)
  • рдЬреЗрд╕реНрдЯ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ (рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛)
  • рдЗрд╕реЗ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓реЗрдВ (рдХрд╛рдо рдХрд░ рд░рд╣реЗ)

рдЕрдм рдореИрдВрдиреЗ рдЙрдиреНрд╣реАрдВ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЕрд╕рдВрдЧрдд рд╣реИред

рдПрдХ рдирдореВрдирд╛ рд░реЗрдкреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рдЬреЗрд╕реНрдЯ рд▓реЛрдЧ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗрдВред @kresli

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рддреНрд░реБрдЯрд┐ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рднреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЕрдзрд┐рдХрддрд░ await рдпрд╛ рдЕрдиреНрдпрдерд╛ async console.log рдЧрд╛рдпрдм рд╣реИрдВред

рдореИрдВ рдлрд┐рд░ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рддрдм рддрдХ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рд▓рдЯреНрдареЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред FAIL рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рд╡рд╣рд╛рдВ рдореЗрд░реЗ 2 рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ 2 рд▓реЙрдЧ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдиреАрдЪреЗ 10 рд▓реЙрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ 8 рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ :)

ezgif com-gif-maker

рдЗрд╕ рдмреАрдЪ, рдпрджрд┐ рдЖрдкрдХреЛ рдХреИрдЪ-рдСрд▓ рдлрд╝рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрдВрд╕реЛрд▓ рджреЛрдиреЛрдВ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП winston рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдХрдВрд╕реЛрд▓ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

winston рдХреЗ рд╕рд╛рде рдЖрдк рдЬреЛ рднреА рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдПрдХрд╛рдзрд┐рдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдЖрдк рд╕реНрд╡рдпрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

const logger = winston.createLogger({
  level: "verbose",
  format: winston.format.json(),
  defaultMeta: {},
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: "combined.log" }),
  ],
});

logger.error(stuff)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рдВрд╕реНрдЯрди рдХреЗ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ console.* рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рдЧрдВрджрд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@kresli рдЖрдкрдХрд╛ рдордЬрд╝рд╛рдХ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ? рдпрд╣ v23 рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде jest v^24.6.0 рдФрд░ node v10.14.2 рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ?

@yaelz рдпрд╣ рдПрдХ рдЬрд┐рджреНрджреА рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдЧ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдЗрддрд┐рд╣рд╛рд╕ рднреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд░реЗрдкреЛ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдорд╛рдорд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рддреБрд░рдВрдд рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рдХрдард┐рди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рд░реЗрдкреЛ рдореЗрд░реЗ рд╕рдВрдЧрдарди рдореЗрдВ рдирд┐рдЬреА рд╣реИ ... рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ :)

рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде jest v^24.6.0 рдФрд░ node v10.14.2 рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ?

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ...

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рдП?

рд╕реЛрдо, рдЕрдЧрд╕реНрдд 5, 2019 рдЕрдкрд░рд╛рд╣реНрди 12:43 рдкрд░ рдиреЙрд░реНрдорди рдПрдирдореИрдиреБрдПрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рддреБрд░рдВрдд рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рдХрдард┐рди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рд░реЗрдкреЛ рдореЗрд░реЗ рд╕рдВрдЧрдарди рдореЗрдВ рдирд┐рдЬреА рд╣реИ... рдореИрдВ рджреЗрддрд╛ рд╣реВрдБ
рддреБрдореНрд╣реЗрдВ рдкрддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ :)

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ
рдореБрджреНрджрд╛, рдореИрдВ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ I
рдорд╛рдирдирд╛...

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/facebook/jest/issues/3853?email_source=notifications&email_token=AB6F4PAE3CHUMEBP7IYXRPLQC7Y2DA5CNFSM4DPZ3JSKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVW3P518KT
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AB6F4PFXDSRHBW5CMTT2DKDQC7Y2DANCNFSM4DPZ3JSA
.

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рдП?

рдЬрд╝рд░реВрд░:

рд╣рдВрд╕реА

^24.8.0

рдиреЛрдб -v

v10.16.0

рдФрд░ рдпрд╣ рдХреБрдЫ npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ e2e, рдПрдХреАрдХрд░рдг, рдЗрдХрд╛рдИ рдФрд░ рд╕реНрд╡реАрдХреГрддрд┐ рджреЛрдиреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ:

"scripts": {
  "test": "NODE_ENV=test npm run test:unit && npm run test:integration:both",
  "test:unit": "NODE_ENV=test jest --config test/jest.config.unit.js --detectOpenHandles",
  "test:integration": "NODE_ENV=test MOCK=false jest --config test/jest.config.integration.js --runInBand --detectOpenHandles",
  "test:integration:mock": "NODE_ENV=test MOCK=true jest --config test/jest.config.integration.js --runInBand --detectOpenHandles",
  "test:integration:both": "NODE_ENV=test npm run test:integration:mock -- --coverage; npm run db:migration:test; npm run test:integration -- --coverage;",
  "test:report": "open docs/test/report/index.html",
  "test:report:coverage": "open docs/test/coverage/lcov-report/index.html"
}

рдпрд╣ jest.config рд╣реИ:

"use strict";

module.exports = {
  "bail": true,
  "verbose": false,
  "collectCoverage": false,
  "expand": true,
  "testURL": "http://localhost:3000/",
  "coverageDirectory": "./docs/test/coverage",
  "testEnvironment": "node",
  "rootDir": "../",
  "setupFilesAfterEnv": [
    "./test/jest.setup.js"
  ],
  "jest.showCoverageOnLoad": true,
  "watchPathIgnorePatterns": ["node_modules"],
  "transform": {
    "^.+\\.js$": "babel-jest",
    '^.+\\.tsx?$': 'ts-jest',
  },
  "reporters": [
    "default",
    ["./node_modules/jest-html-reporter", {
      "pageTitle": "...",
      "outputPath": "./docs/test/report/index.html",
      "includeFailureMsg": true,
      "sort": "titleAsc",
      "dateFormat": "yyyy-mm-dd HH:MM:ss"
    }]
  ]
};

рдЖрд╢рд╛ рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдлрд┐рд░ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рддрдм рддрдХ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рд▓рдЯреНрдареЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред FAIL рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рд╡рд╣рд╛рдВ рдореЗрд░реЗ 2 рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ 2 рд▓реЙрдЧ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдиреАрдЪреЗ 10 рд▓реЙрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ 8 рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ :)

ezgif com-gif-maker

@kresli рдЖрдкрдХреЗ рдпрд╣рд╛рдВ рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдФрд░ рдЯрд╛рдЗрдо рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИ? рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ _RUN HARNESS test-harness/index.js_ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЪрд▓рдиреЗ рддрдХ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред рдореИрдВ рддрдм рдЕрдкрдирд╛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ _RUN HARNESS..._ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди _ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрджреЛрд╣рди тАЛтАЛ...._

рдЕрджреНрдпрддрди: рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рди рджреЗрдВ, рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдмрди рдЧрдпрд╛

рдЕрднреА рднреА рдореИрдХреЛрдЬрд╝ рдкрд░ рдиреЛрдб v12.16.1, рдЬреЗрд╕реНрдЯ 25.5.4, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.8.3 рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред --runInBand рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ, рд╡рд░реНрдмреЛрдЬрд╝ рдХреЛ рдЕрдХреНрд╖рдо/рд╕рдХреНрд╖рдо рдХрд░рдиреЗ, --silent=true рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдЗрд╕рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред

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

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

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

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

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

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

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