рдпрджрд┐ рдЖрдкрдХреЛ 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".
@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
рдХреГрдкрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реЗрдЦреА рдмрдШрд╛рд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЧрдВрднреАрд░ рд░рд┐рдкреНрд░реЛ рдХреЗ рд╕рд╛рде рдЖрдПрдВред
рдЪреАрдпрд░реНрд╕!
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рд╕рдЪрдореБрдЪ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдпрд╛, рдФрд░ рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рдпрд╛, рдФрд░ рдпрд╣ рдореЗрд░реЗ рдореИрдХ рдкрд░ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдорд┐рдирдЯ рдкрд╣рд▓реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рдеред рджреЗрдЦреЛ:
рдЬрдм рд╕реЗ рдореИрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд╣реВрдВ (рдиреЛрдб 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
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдб 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
рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИред
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
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
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": [
"
],
"рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": [
"
],
"рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рд╡рд░рдг": "jsdom",
"рдХреНрд░рд┐рдпрд╛": рд╕рдЪ,
"рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕": [
{
"рдбрд┐рд╕реНрдкреНрд▓реЗрдирд╛рдо": " рдШрдЯрдХ ",
"рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": [
"
],
"рдореЙрдбреНрдпреВрд▓рдкрд╛рде": ["
"рдЯреЗрд╕реНрдЯрдореИрдЪ": ["рд░реЗрдбреНрдпреВрд╕рд░ ","рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": ["
},
{
"рдбрд┐рд╕реНрдкреНрд▓реЗрдирд╛рдо": " рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ ",
"рд╕реЗрдЯрдЕрдкрдлрд╛рдЗрд▓реНрд╕": [
"
],
"рдореЙрдбреНрдпреВрд▓рдкрд╛рде": ["
"рдЯреЗрд╕реНрдЯрдореИрдЪ": ["
}
]
},
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)
})
})
рдЖрдЙрдЯрдкреБрдЯ:
рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ:
{
"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 рд╕реНрдЯреНрд░реАрдо рдХреЛ "рд╡рд┐рд░рд╛рд╕рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЪ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ! рдпрджрд┐ рд╡реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╣реЛрдВрдЧреЗ
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрди рдЯреНрдЯреА рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ "рд╡рд┐рд░рд╛рд╕рдд" рдореЛрдб рд╕реЗ "рдкрд╛рдЗрдк" рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдзреЗ рдореБрдЦреНрдп 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",
рдХреБрдЫ рдЕрдиреНрдп рдЕрд╡рд▓реЛрдХрди:
рд╣реИрд▓реЛ рджреЛрд╕реНрддреЛрдВ/рд▓рдбрд╝рдХрд┐рдпреЛрдВ,
--рд╡реЙрдЪ рдореЛрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╕рдордп рдореИрдВ рдкреНрд░рд╕рд┐рджреНрдз рдЬреЗрд╕реНрдЯ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рднреА рдорд┐рд▓рд╛ред
рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди --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])
рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ:
рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдХ --рдШрдбрд╝реА рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 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
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ, рдЕрдЧрд░ рдореИрдВ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИред рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рджреЗрддрд╛ рд╣реИред
рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 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 рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИред
рдЕрдЧрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред
@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)
рдЕрдм рдореИрдВрдиреЗ рдЙрдиреНрд╣реАрдВ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЕрд╕рдВрдЧрдд рд╣реИред
рдПрдХ рдирдореВрдирд╛ рд░реЗрдкреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рдЬреЗрд╕реНрдЯ рд▓реЛрдЧ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗрдВред @kresli
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рддреНрд░реБрдЯрд┐ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рднреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЕрдзрд┐рдХрддрд░ await
рдпрд╛ рдЕрдиреНрдпрдерд╛ async console.log
рдЧрд╛рдпрдм рд╣реИрдВред
рдореИрдВ рдлрд┐рд░ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рддрдм рддрдХ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рд▓рдЯреНрдареЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред FAIL рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рд╡рд╣рд╛рдВ рдореЗрд░реЗ 2 рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ 2 рд▓реЙрдЧ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдиреАрдЪреЗ 10 рд▓реЙрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ 8 рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ :)
рдЗрд╕ рдмреАрдЪ, рдпрджрд┐ рдЖрдкрдХреЛ рдХреИрдЪ-рдСрд▓ рдлрд╝рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрдВрд╕реЛрд▓ рджреЛрдиреЛрдВ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ :)
@kresli рдЖрдкрдХреЗ рдпрд╣рд╛рдВ рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдФрд░ рдЯрд╛рдЗрдо рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИ? рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ _RUN HARNESS test-harness/index.js_ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЪрд▓рдиреЗ рддрдХ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред рдореИрдВ рддрдм рдЕрдкрдирд╛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ _RUN HARNESS..._ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди _ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ
рдЕрджреНрдпрддрди: рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рди рджреЗрдВ, рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдмрди рдЧрдпрд╛
рдЕрднреА рднреА рдореИрдХреЛрдЬрд╝ рдкрд░ рдиреЛрдб v12.16.1, рдЬреЗрд╕реНрдЯ 25.5.4, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.8.3 рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред --runInBand рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ, рд╡рд░реНрдмреЛрдЬрд╝ рдХреЛ рдЕрдХреНрд╖рдо/рд╕рдХреНрд╖рдо рдХрд░рдиреЗ, --silent=true рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдЗрд╕рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдмрд┐рдирд╛ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХреЗ рджреЛ рд╕рд╛рд▓ рдиреЗ рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рдбреЗрд╡рд▓рдкрд░ рдмрдирд╛ рджрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж рдЯреАрдо рдЬреЗрд╕реНрдЯ!