Jest: рдХрдВрд╕реЛрд▓.рдПрд░рд░/рд╡рд╛рд░реНрди/рд▓реЙрдЧ рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реЛрдиреЗ рджреЗрдВ

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


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

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
BufferedConsole рдХреЗ рдХрд╛рд░рдг, console.error , console.log , console.warn рдФрд░ console.info рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╣рдо console.error рдФрд░ console.warn рдереНрд░реЛ рдПрд░рд░ рдФрд░ рдлреЗрд▓ рдЯреЗрд╕реНрдЯ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ https://repl.it/languages/jest рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдФрд░ рдпрд╛ рддреЛ рдПрдХ repl.it рдбреЗрдореЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдпрд╛ рдЧрд┐рдЯрд╣рдм рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рднрдВрдбрд╛рд░ рд╣реИ рдХрд┐ рд╣рдо yarn install рдФрд░ yarn test рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ console.error = (message) => { throw new Error(message); }; (рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдпрд╛ setupFiles/setupFramework рдореЗрдВ) рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдХрд┐рд╕реА рднреА рд╕рдордп console.error рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдХреАрдХрдд рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ред

рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рд╕рдЯреАрдХ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдЬреЗрд╕реНрдЯ, рдиреЛрдб, рдпрд╛рд░реНрди/рдПрдирдкреАрдПрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред

рдПрди/рдП

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

рдореЙрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

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

рдореЙрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

@thymikee рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:

"setupTestFrameworkScriptFile": "<rootDir>/tools/jest/setup-framework.js" рдореЗрдВ

beforeEach(() => {
  console.error = jest.fn((error) => {
    throw new Error(error);
  });
});

рдкрд░реАрдХреНрд╖рдг рдореЗрдВ:

const somePromiseThatLogsConsoleError = () => {
  return new Promise((resolve, reject) => {
    console.error('foobar');
    resolve();
  });
});

it('test that has console.error', () => {
  return somePromiseThatLogsConsoleError().then(() => {
    expect(false).toBeTrue();
  });
});

рдореИрдВрдиреЗ рдЕрднреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛:

// test file
test('lol', () => {
  return new Promise((resolve) => {
    console.log('lol');
    resolve();
  });
});
// setup file
global.console.log = () => {
  throw new Error('hey!');
};

рдирддреАрдЬрд╛:

 __tests__/test-test.js
  тЬХ lol (3ms)

  тЧП lol

    hey!

      at CustomConsole.Object.<anonymous>.global.console.log (setup.js:2:9)
      at resolve (__tests__/test-test.js:3:13)
      at Object.<anonymous>.test (__tests__/test-test.js:2:10)
      at process._tickCallback (internal/process/next_tick.js:109:7)

Test Summary
 тА║ Ran all tests.
 тА║ 1 test failed, 0 tests passed (1 total in 1 test suite, run time 0.661s)
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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