Jest: ํ…Œ์ŠคํŠธ์—์„œ console.error/warn/log ๋ฎ์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ

์— ๋งŒ๋“  2017๋…„ 03์›” 31์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/jest


๊ธฐ๋Šฅ ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ ๋ฅผ ๋ณด๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
ํŠน์ง•

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
BufferedConsole ๋กœ ์ธํ•ด console.error , console.log , console.warn ๋ฐ console.info ๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€: console.error ๋ฐ console.warn ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋™์ž‘์ด ๋ฒ„๊ทธ์ธ ๊ฒฝ์šฐ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„์™€ https://repl.it/languages/jest ๋ฅผ ํ†ตํ•ด repl.it ๋ฐ๋ชจ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ yarn install ๋ฐ yarn test ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
console.error = (message) => { throw new Error(message); }; (์ „์—ญ์ ์œผ๋กœ, ํ…Œ์ŠคํŠธ์—์„œ ๋˜๋Š” setupFiles/setupFramework์—์„œ)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ…Œ์ŠคํŠธ์—์„œ console.error ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ Jest ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  Jest, ๋…ธ๋“œ, yarn/npm ๋ฒ„์ „ ๋ฐ ์šด์˜ ์ฒด์ œ๋ฅผ ์–ธ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค.

ํ•ด๋‹น ์—†์Œ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์กฐ๋กฑ ํ•จ์ˆ˜ 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 ๋“ฑ๊ธ‰