Jest: ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ console.log๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2016๋…„ 12์›” 25์ผ  ยท  236์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/jest

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

๋ฒ„๊ทธ ๋ณด๊ณ  .

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ˜ธ์ถœ console.log ๊ธฐ๋ณธ testEnvironment ์‚ฌ์šฉํ•˜์—ฌ jsdom ํ‘œ์ค€ ์ถœ๋ ฅ์— ์ธ์‡„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

  1. ๋ณต์ œ https://github.com/udbhav/jest-test
  2. yarn test
  3. console.log์— ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. testEnvironment Jest ๊ตฌ์„ฑ ์„ค์ •์„ node
  5. yarn test ๋‹ค์‹œ ์‹คํ–‰
  6. console.log์˜ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚ด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ console.log๊ฐ€ ํ•ญ์ƒ ์ถœ๋ ฅ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

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

ํŒจํ‚ค์ง€ ๋ฒ„์ „์€ ์ €์žฅ์†Œ์—์„œ package.json ๋ฐ yarn.lock ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋…ธ๋“œ 7.3.0๊ณผ ์–€ 0.18.1์„ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋…ธ๋“œ v4.4.7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ๋‚ด๊ฐ€ ์—ผ๋ คํ•˜๋Š” ํ•œ - console.log ์‚ฌ์šฉํ•  ๋•Œ stdout์— ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ๋„์›€์„ ๋ฐ›์œผ๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฒ„๊ทธ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์„ ๋ณด๊ณ ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ์œ ์ผํ•œ ๋‹ค๋ฅธ ์ ์€ ์ด์ „์—๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ํ•˜๋‚˜๋งŒ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๋ฉด console.log ์ถœ๋ ฅ์ด ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  236 ๋Œ“๊ธ€

repl.it์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค: https://repl.it/EwfT/0

์ข‹์€ ์†Œ์‹์€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  console.log๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด jest ๋ฒ„์ „์„ 17.0.3์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ v6.9.2๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด nvm ๋ฅผ ์„ค์น˜ํ–ˆ๊ณ  hurray console.log๋Š” jsdom์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ๋…ธ๋“œ v7์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ #2166์˜ ๋ณต์ œ๋ณธ์ด๋ฉฐ ๋…ธ๋“œ 6์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@thymikee #2166์˜ ๋ณต์ œํ’ˆ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ console.log ์•„๋ฌด ๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Node v4์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ง์Šค๋Ÿฌ์šด ์ ์€ ์˜ค๋Š˜ ์ผ์ฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ๋‚ด ํ™˜๊ฒฝ์ด 0์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ๋” ์ด์ƒ ํ„ฐ๋ฏธ๋„์— console.log ์ถœ๋ ฅ์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@thisissami ๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ŠคํŠธ ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Jest์˜ ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์€ ๋…ธ๋“œ 4์™€ ๋…ธ๋“œ 6์„ ํ†ต๊ณผํ•˜์—ฌ ์ฝ˜์†” ์ธ์‡„๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  7.3์— ๋Œ€ํ•œ ์ˆ˜์ • ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@cpojer - ๋‚ด ํ…Œ์ŠคํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ํ†ต๊ณผ/์‹คํŒจํ•ฉ๋‹ˆ๋‹ค - console.log ๋ฉ”์‹œ์ง€๋งŒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. console.log ์˜ํ•ด ํŠน์ • ๊ฐœ์ฒด์˜ ์†์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•˜๊ณ  ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ๋•Œ ์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ console.log ๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ํ„ฐ๋ฏธ๋„์— ์•„๋ฌด ๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. =/ ํ˜„์žฌ Jest v17 ๋กœ ๋Œ์•„๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ๋” ์ผ์ฐ ์ž‘๋™ํ•˜๊ณ  ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋‹น์‹ ์ด ์ง์ ‘ ์—…๋ฐ์ดํŠธํ–ˆ๊ฑฐ๋‚˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ง๊ฐ€๋œจ๋ ธ์Œ์— ํ‹€๋ฆผ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 2์ฃผ ๋™์•ˆ Jest ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ฐœํ‘œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜, ๋‚ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ๋ณ€๊ฒฝ๋œ ์œ ์ผํ•œ ๊ฒƒ์€ ๋‚ด๊ฐ€ (์ž์‹ ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ) ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ ๋’ค์— ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•˜๋ฉด ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@cpojer ๋ฌด์Šจ ๋ง์„ ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์ž˜๋ชป๋œ ๊ฒƒ์ด ์—†์ง€๋งŒ stdout์— ์•„๋ฌด ๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

import React from 'react';
import {shallow} from 'enzyme';
import FundPercentage from '../../src/reactClasses/fund_percentage';

console.log('cmon');
describe('Normal Percentage', () => {
  console.log('do this');
  const percentage1 = shallow(
    <FundPercentage percentage={0.5}/>
  );
  const percentage2 = shallow(
    <FundPercentage percentage={0.26}/>
  );
  it('should work', () => {
    console.log(percentage1.childAt(0));
    expect(0).toBe(1);
  });
});

ํ…Œ์ŠคํŠธ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํŒจํ–ˆ์œผ๋ฏ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. package.json ๋‚ด ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ง ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  "jest": {
    "collectCoverageFrom": [
      "src/*.jsx"
    ]
  }

Jest๋Š” ์™„์ „ํžˆ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์œผ๋ฉฐ ์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ฒจ๋ถ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Jest v17 ๋ฐ 18๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์˜คํ›„ ๋‚ด๋‚ด ์ด ํŒŒ์ผ ์™ธ์—๋Š” ๋ณ€๊ฒฝํ•œ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค์–‘ํ•œ ๊ฒƒ์„ stdout ์— ์ถœ๋ ฅํ•˜์—ฌ enzyme ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์—ˆ๊ณ  expects ์ผ๋ถ€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„ console.logs ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•„์š”ํ•  ๋•Œ ์ž‘๋™ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ํ…Œ์ŠคํŠธ์—์„œ ๋ฌด์—‡์„ ๊ฐ€์ง€๊ณ  ์žˆ๋“  ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ํ™˜๊ฒฝ์—์„œ๋„ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์ง€๊ธˆ v17๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ ์™ธ์—). ์ด๋Š” ํ™•์‹คํžˆ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ 7.3์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ ์ถ”์ ๊ธฐ๋Š” ๋„์›€๋ง ํฌ๋Ÿผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์งˆ๋ฌธ์— stackoverflow๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค :)

๋‚˜๋Š” ๋…ธ๋“œ v4.4.7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ๋‚ด๊ฐ€ ์—ผ๋ คํ•˜๋Š” ํ•œ - console.log ์‚ฌ์šฉํ•  ๋•Œ stdout์— ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ๋„์›€์„ ๋ฐ›์œผ๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฒ„๊ทธ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์„ ๋ณด๊ณ ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ์œ ์ผํ•œ ๋‹ค๋ฅธ ์ ์€ ์ด์ „์—๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ํ•˜๋‚˜๋งŒ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๋ฉด console.log ์ถœ๋ ฅ์ด ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@cpojer ์—ฌ๊ธฐ์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

3๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด( .test.js ์žˆ๋Š” 3๊ฐœ์˜ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ์™€ ๊ฐ™์ด ํ•ด๋‹น ํŒŒ์ผ ์ค‘ 2๊ฐœ๋Š” ์ž์Šต์„œ์˜ ์˜ˆ์ œ์ž„) ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ(์œ„์—์„œ ๋ณต์‚ฌ)๋Š” ๋ชจ๋“  console.logs๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

๋‹จ 1๋ฒˆ์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰(ํŒŒ์ผ ์ค‘ 2๊ฐœ์—์„œ .test.js ์„ .teast.js ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ)๋งŒ ํ•˜๋ฉด console.log ์ถœ๋ ฅ์ด ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋‘ ๋ฒˆ์งธ ์ž„์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐœ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Jest์˜ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋Š” ๋…ธ๋“œ 4, ๋…ธ๋“œ 6 ๋ฐ ๋…ธ๋“œ 7.3์—์„œ ์ด ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. 4์™€ 6์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ 7.3์—์„œ ๊นจ์กŒ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ 7.3์— ๋Œ€ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ • ์ค‘์ด๋ฉฐ ๊ณง Jest์˜ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. https://github.com/facebook/jest/pull/2464

๋…ธ๋“œ 4๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Jest์˜ ์ž์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์„ค์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ์ง€๊ธˆ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

์ด 3๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” console.log์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด์™€ ์•„๋ž˜ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋†๋‹ด์˜ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ ์™ธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋งŒ ์‹คํ–‰ํ•  ๋•Œ ๋‚ด ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ด์ƒํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.

screen shot 2016-12-28 at 5 55 29 pm

์ด๋Š” ๋ฌธ์ œ์™€ ๊ด€๋ จ ์—†์ด ์ˆ˜์€(hg)์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ๋‹น์‹ ์„ ์œ„ํ•ด ํ†ต๊ณผ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์—์„œ ๋กœ๊น… ๋™์ž‘์„ ๋ช…์‹œ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๋‚˜ ์„ค์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ํ‹€๋ฆผ์—†์Šต๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ ์ž‘๋™ํ•˜์ง€๋งŒ ํŒŒ์ผ์ด ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? "์•„, ๊ฐ€๋” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค."๋ผ๋Š” ๋ถ„๋ช…ํ•œ ์ƒ๊ฐ์ด ๋– ์˜ค๋ฅด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ - ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•ญ์ƒ ์ตœ์†Œ 2๊ฐœ์˜ ํŒŒ์ผ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :)

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋Š”๋ฐ console.log๊ฐ€ ํ˜„์žฌ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” ์•ฝ 1์‹œ๊ฐ„ ์ „์ด์—ˆ์Šต๋‹ˆ๋‹ค). ๋…ธ๋“œ 6.9.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ --forceExit ํ”Œ๋ž˜๊ทธ๋„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด console.log ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ --forceExit ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๊ณ  console.log๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฏ€๋กœ --forceExit ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ด ๋™์ž‘์„ ์œ ๋ฐœํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@thisissami ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‹จ์ผ ํŒŒ์ผ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งŒ ๋กœ๊น… ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ gulpfile.js ๋‚ด์—์„œ jest-cli(jest.runCLI)๋ฅผ ํ†ตํ•ด jest๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ console.log์˜ ์ถœ๋ ฅ์„ ์‚ผํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. jest๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋ฉด ์ฝ˜์†” ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ํŽ‘ํ‚คํ•œ ๋™์ž‘์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1) Jest๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
2) Jest๋Š” console.log ๋ฌธ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ ๊นœ๋ฐ•์ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค).
3) Jest๋Š” ๋•Œ๋•Œ๋กœ ๋ชจ๋“  console.log ํ–‰, ๋•Œ๋กœ๋Š” ์ผ๋ถ€, ๋•Œ๋กœ๋Š” ์ „์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ์ž„์˜์˜ ์ˆ˜์˜ ํ–‰์„ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค.
4) Jest๋Š” ๋‹ค์Œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์ด์ „ ํ…Œ์ŠคํŠธ์˜ console.log ์ค„์ด ์‚ฌ๋ผ์ง).

๋†๋‹ด v18.1.0

๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ์—์„œ ์ด๊ฒƒ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ถœ๋ ฅ์„ ๋ฎ์–ด์“ฐ๋Š” ์ถœ๋ ฅ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

image

ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์˜ค๋ฅ˜(์‹คํŒจํ•œ ์†Œํ’ˆ ์œ ํ˜•)๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ ๋กœ๊ทธ์— ์˜ํ•ด ๋ฐ”๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋”:

image

๊ทธ๋ฆฌ๊ณ  ๋•Œ๋•Œ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ Ctrl + c ๋ฅผ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ๋งˆ์น˜๋ฉด ๋ณผ ์ˆ˜ ์—†๋Š” ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „
๋†๋‹ด: 17.0.1
๋…ธ๋“œ: 6.6.0
NPM: 3.10.3
๋งฅOS: 10.12.2
ํ„ฐ๋ฏธ๋„: 2.7.1(iTerm2 3.0.13์—๋„ ์žˆ์Œ)
์Šคํฌ๋ฆฝํŠธ( package.json ): jest /src/main/js --watch ๋˜๋Š” jest /src/main/js --coverage ๋˜๋Š” jest --watch --onlyChanged ๋ชจ๋‘ ๋™์ผํ•œ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค.

@davidgilbertson v18.1 ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

18.1.0 ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋” ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค.

image

ํŠน์ • ํŒจํ„ด์„ ๊ณ ๋ฅผ ์ˆ˜๋Š” ์—†์ง€๋งŒ ๋ฐœ์ƒํ•œ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ(๋‚ด ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์— console.warn('----------------') ์ด ์žˆ์Šต๋‹ˆ๋‹ค.)

  • ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์•„๋ž˜์—์„œ ์•ฝ๊ฐ„ ์œ„๋กœ ์Šคํฌ๋กคํ•˜๋ฉด ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ํ„ฐ๋ฏธ๋„ ์ฐฝ์„ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜๋ฉด(์ž๋™ ์Šคํฌ๋กค์ด ์‹œ์ž‘๋จ) ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์œ„๋กœ ์Šคํฌ๋กคํ•˜๊ณ  console.warn ์ค„์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค(๋ฎ์–ด์“ฐ๊ธฐ๋กœ ์ถ”์ •๋จ).
  • ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ”๋กœ ctrl + c ๋ˆ„๋ฅด๋ฉด ์ผ๋ถ€ ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋˜‘๊ฐ™์ด ํ•˜๊ณ  ์ค‘๋‹จํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • jest /src/main/js --watch ํ•œ ๋ฒˆ ์‹คํ–‰ํ•œ ๋‹ค์Œ a ๋ฅผ ๋ˆŒ๋Ÿฌ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด src/main/assets/legacy ๋””๋ ‰ํ† ๋ฆฌ์—์„œ glob๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ๋ ˆ๊ฑฐ์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • jest --watch (๋‚ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” .test.js ๋˜๋Š” .test.jsx ๋๋‚จ)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์œ„์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ณ„ ๋ชจ๋“œ์—์„œ 'a'๋ฅผ ๋ˆ„๋ฅด๋ฉด src/test/js/spec/categoryselector/spec.js ๋ผ๋Š” ์˜ค๋ž˜๋œ ์žฌ์Šค๋ฏผ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๊ณณ์„ ์ฐพ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. Enter ๋ˆ„๋ฅด๋ฉด ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ˆ„๋ฝ๋œ ์†Œํ’ˆ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ค๋ฅ˜๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ctrl+c ์ถœ๋ ฅ์„ ์œ ์ง€ํ•ด์•ผ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฎ์–ด์“ฐ๊ธฐ ์ „์— ์žก์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(jest 19.0.1, ๋…ธ๋“œ 5.12). ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ๋™์ผํ•œ ์„ค์ •์œผ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Jest ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์ง๋ ฌ๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด jest ํ”Œ๋ž˜๊ทธ --runInBand ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

bail ํ”Œ๋ž˜๊ทธ๋Š” ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ์ธ์‡„๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ์•ฝ๊ฐ„ ๋ถˆ์•ˆํ•œ ์ ์€ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์ผ๋ถ€ ์ฝ˜์†” ๋กœ๊ทธ ๋ช…๋ น๋ฌธ์ด ์ฝ˜์†”์— ์ถœ๋ ฅ๋˜๊ณ  ์ผ๋ถ€๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์‹คํŒจํ•œ ์œ„์น˜์— ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ํ•ญ๋ชฉ์€ ์ถœ๋ ฅ์„ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค, ํ…Œ์ŠคํŠธ๋œ ๋‹จ์œ„ ๋“ฑ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์†Œ์šฉ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ๋™์ž‘์ด ๊ฐ„๊ฒฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ด๊ฒƒ์ด ํ”Œ๋ž˜๊ทธ๋กœ ๊ท€๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ ˆ์ด์•„์›ƒ btw๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. --bail ํ”Œ๋ž˜๊ทธ๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ (๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ํ…Œ์ŠคํŠธ๋Š” ์–ด์จŒ๋“  ๋‚ด ๊ฒฝ์šฐ์—๋Š” ๋งˆ์ง€๋ง‰ ํ…Œ์ŠคํŠธ์ž„) --runInBands์—๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Jest๋Š” ์—…๋ฐ์ดํŠธ๋œ ํŒŒ์ผ btw๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ๋‚ด๊ฐ€ console.log ๋ฌธ์„ ์‚ฝ์ž…ํ•˜๋ฉด ์˜ค๋ฅ˜ ์Šคํƒ ์ถ”์ ์€ ์—…๋ฐ์ดํŠธ๋œ ์ค„ ๋ฒˆํ˜ธ์—์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—(๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ˆ˜์ •ํ•ด ์ฃผ์„ธ์š”) console.log๋Š” ํ…Œ์ŠคํŠธ์˜ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์ ˆ๋Œ€์ ์œผ๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์‹ค์ œ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. TypeError(์ •์˜๋˜์ง€ ์•Š์€ ์†์„ฑ์— ์•ก์„ธ์Šค)๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์˜ค๋„ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ฝ˜์†”์—์„œ ์Šคํƒ ์ถ”์ ์„ ๋ณด์•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ผ์ข…์˜ ์‹คํ–‰ ์ค‘์ž„์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ถ”์ ์„ ๋ณด์ง€๋งŒ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ฝค ํ•ฉ์‚ฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค :) ์™œ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•˜๋ฉด ๋กœ๊ทธ๊ฐ€ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? (๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ ์˜ค๋ฅ˜ ์ง€์ ๊นŒ์ง€ ๋ฐœ์ƒํ•œ ๋กœ๊ทธ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด์ง€ ์˜ค๋ฅ˜ ์ดํ›„์˜ ๋กœ๊ทธ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. :))

๋‚ด ํ™˜๊ฒฝ์—์„œ๋Š” package.json ์˜ jest ์˜ต์…˜์— verbose: true ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ false๋กœ ๋ณ€๊ฒฝ(๋˜๋Š” ์ œ๊ฑฐ)ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ชจ๋“  ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ์ง€๊ธˆ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ 18.1์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ์ข…์†์„ฑ์„ ํ™•์ธํ•˜์„ธ์š”. ๋ธŒ๋ผ์šฐ์ € ๊ฐœ์ฒด๋ฅผ ์กฐ๋กฑํ•˜๋ ค๋Š” ์‹œ๋„์—์„œ mock-browser ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ global ๋ฅผ ์ž์ฒด ๊ฐœ์ฒด๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

package.json(์ œ์ŠคํŠธ ๊ตฌ์„ฑ)

"jest": {
    "testEnvironment": "node",
    "moduleFileExtensions": [
        "js",
        "json"
    ],
    "moduleDirectories": [
        "node_modules",
        "src"
    ],
    "transform": {
        "^.+\\.js$": "babel-jest"
    },
    "roots": [
        "<rootDir>/__test__"
    ],
    "setupFiles": [
        "<rootDir>/__test__/test-setup.js"
    ],
    "moduleNameMapper": {
        "client": "<rootDir>/src/client",
        "common": "<rootDir>/src/common",
        "server": "<rootDir>/src/server",
        "!CONFIG": "<rootDir>/config/env/test.js",
        "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/file.js",
        "\\.(css|less)$": "identity-obj-proxy"
    }
}

ํ…Œ์ŠคํŠธ ์„ค์ •.js

const mockBrowser = require('mock-browser').mocks.MockBrowser;

const MockBrowser = new mockBrowser();
global.APP_CONFIG = require('!CONFIG').default;

global.__DEVELOPMENT__ = false;
global.__TESTING__ = true;
global.__PRODUCTION__ = false;
global.document = MockBrowser.createDocument();
global.window = MockBrowser.createWindow();
global.localStorage = MockBrowser.getLocalStorage();

ํ…Œ์ŠคํŠธ ์„ค์ •.js
mock-browser ๋น„ํŠธ ์ฃผ์„ ์ฒ˜๋ฆฌ ์ค‘...

// const mockBrowser = require('mock-browser').mocks.MockBrowser;

// const MockBrowser = new mockBrowser();
global.APP_CONFIG = require('!CONFIG').default;

global.__DEVELOPMENT__ = false;
global.__TESTING__ = true;
global.__PRODUCTION__ = false;
// global.document = MockBrowser.createDocument();
// global.window = MockBrowser.createWindow();
// global.localStorage = MockBrowser.getLocalStorage();

console.log ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ถ„๋ช…ํžˆ # 2166์˜ ๋ณต์ œ๋ณธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— $0.02๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ:

  • jest --watch --verbose (v19.0.2)๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
  • ์ผ๋ถ€(์ „๋ถ€๋Š” ์•„๋‹˜) console.log ๋ฌธ์€ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ค‘์ด๋‚˜ ์š”์•ฝ์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ œ ๊ฒฝ์šฐ์—๋Š” _.reduce ํ˜ธ์ถœ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ธ”๋ก ๋‚ด์˜ ๋ชจ๋“  console.log ๋ฌธ์€ ํ‘œ์‹œ ๋˜์ง€ ์•Š๊ณ  , reduce ๋ธ”๋ก ์™ธ๋ถ€ ์˜ console.log ๋ฌธ ์€ ํ‘œ์‹œ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์†๊ธฐ ๋ณธ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ์Œ์„ ๋‹ค๋ฅธ ์ˆ˜๋‹จ(์ปค๋ฒ„๋ฆฌ์ง€, ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ)์œผ๋กœ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ด ๋ถ€๋ถ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๋™๊ธฐ/์•ฝ์†์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์™œ reduce ํ˜ธ์ถœ์ด ์–ด๋–ค ๊ฒƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • --runInBand ํ•˜์—ฌ jest๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ชจ๋“  console.log ๋ฌธ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ด์ „ ๋ณด๊ณ ์„œ์™€๋Š” ๋‹ฌ๋ฆฌ ๋‚˜๋Š” ์‹คํ–‰ํ•˜๊ณ  "testEnvironment": "node" ํ•˜์ง€ jsdom

๋‹ค์Œ ์˜๊ฒฌ์€ ๋‚ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/facebook/jest/issues/2441#issuecomment -273643521
https://github.com/facebook/jest/issues/2441#issuecomment -278202180

๊ทธ๊ฒƒ์€ ๊ฝค ๋นจ๋ฆฌ,ํ•˜์ง€๋งŒ console.logs ์‹ค์ œ๋กœ ํ™”๋ฉด์œผ๋กœ ๊ทธ๋ ค ํ›„ ๋ฎ์–ด ์“ฐ๊ธฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์•Š์Šต๋‹ˆ๋‹ค.

console.log ๊ฐ€ ์‹ค์ œ๋กœ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๊ธฐ ์ „์— ~0.2์ดˆ ๋™์•ˆ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ๊ฒƒ์„ ๋™์˜์ƒ์œผ๋กœ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

--watch ์—†์ด --verbose ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

10๋ถ„ ๋™์•ˆ ๊ฒฉ๋ฆฌ๋œ ์žฌํ˜„ ์ผ€์ด์Šค๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์•„๋งˆ๋„ ํฐ(well, >1) ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์—์„œ๋งŒ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋™์ž‘์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • console.log ์ด์ „
    screen shot 2017-03-29 at 3 38 51 pm

  • console.log - 1์ดˆ ๋™์•ˆ ํ‘œ์‹œ๋จ(<0.2์ดˆ)
    screen shot 2017-03-29 at 3 39 34 pm

  • console.log๋ฅผ ์น ํ•œ ํ›„
    screen shot 2017-03-29 at 3 39 47 pm

์ด ๋ฌธ์ œ๋Š” ์ •๋ง ์งœ์ฆ๋‚˜์„œ ์ด ๋ฌธ์ œ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Facebook ์—”์ง€๋‹ˆ์–ด๋“ค์ด ๊ดœ์ฐฎ์€ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋†๋‹ด์„ ๊ณจ๋ž๊ณ  ์ด์ œ ์ด๊ฒƒ์€ ...

์ด๋ž˜์„œ ์ œ์ŠคํŠธ๊ฐ€ ์‹ซ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๋“ ์ง€ ๊ทธ๋“ค์€ ๋‹น์‹ ์˜ ์ฝ˜์†”์„ ์ง€์šฐ๊ณ  ์ฝ˜์†” ๋ฌธ์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•  ๊ฒƒ์ด๊ณ , ๋‹น์‹ ์ด ์ˆ˜์ •ํ•ด์•ผ ํ•  ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์–ด๋–ป๊ฒŒ๋“  ๋ฌด์ž‘์œ„๋กœ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ทธ๋“ค์€ ๋ชจ๋“  ๊ฒƒ์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ฝ˜์†” ์ถœ๋ ฅ์„ ์ˆจ๊ธฐ๋ ค๋Š” ์‹œ๋„๋ฅผ ์ค‘์ง€ํ•˜์ง€ ์•Š์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ํ›ˆ๋ จ์šฉ ๋ฐ”ํ€ด๋ฅผ ์›ํ•˜๋ฉด Angular 1์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ƒ๋‹นํžˆ ๊ณต๊ฒฉ์ ์ž…๋‹ˆ๋‹ค. @halis. Jest๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜๊ณ  ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์‹œ์— ํ„ฐ๋ฏธ๋„์— ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Jest์˜ ์ถœ๋ ฅ์ด ์“ธ๋ชจ์—†๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. --verbose ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ๋ฒ„ํผ๋งํ•˜์ง€ ์•Š๊ณ  ์ฝ˜์†”์— ๋ฐ”๋กœ ์”๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด Jest์— PR์„ ๋ณด๋‚ด๊ณ  ์ด ๋™์ž‘์„ ๊ฐœ์„ ํ•˜์—ฌ ์šฐ๋ฆฌ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ธˆ์š”์ผ์— ์ •๋ง ์ข‹์ง€ ์•Š์€ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ด๊ณ  ์ขŒ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์—๊ฒŒ ๊ทธ๊ฒƒ์„ ๊บผ๋‚ผ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค, ๋‹น์‹ ์€ ๋‹จ์ง€ ๋„์šฐ๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธˆ์š”์ผ์— --verbose ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ถœ๋ ฅ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ ๋งํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋Ÿฐ ๊ฑฐ์‹œ๊ธฐํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋‹จํ•ด. JavaScript ๋„๊ตฌ๊ฐ€ ๋‹น์‹ ์˜ ๊ธˆ์š”์ผ์„ ๋ง์น˜๊ฒŒ ํ•˜์ง€ ๋งˆ์„ธ์š” ๐Ÿ˜€

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? console.log๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•?

๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ํ–‰๋™์€ ๋‚ด ๋จธ๋ฆฌ๋ฅผ ๋ช‡ ๋ฒˆ(์—ฌ๋Ÿฌ ๋ฒˆ ๋” ๋งŽ์ด) ๋‘๋“œ๋ฆฐ ํ›„ --verbose๊ฐ€ ์‹ค์ œ๋กœ console.log๊ฐ€ ์ธ์‡„๋˜์ง€ ์•Š์€ ์›์ธ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์€ ๋‚ด ์ฝ˜์†”์— ์ผ๋ถ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์‡„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ด€๋ จ๋œ ์ž์„ธํ•œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†๋Š” package.json์— ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นจ๋ฆฌ ๊ณ ์ณ์ฃผ์‹œ๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

์ด ๋ฌธ์ œ๋Š” console.log๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์„ ์–ด๋ ต๊ฒŒ/๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๊ฝค ์„ฑ๊ฐ€์‹ญ๋‹ˆ๋‹ค(์ €๋Š” .. ๊ตฌ์‹์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค).
--runInBand ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด ๋กœ๊ทธ ๋ฌธ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๊ฒฐ๊ณผ๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค... ํ•œ ๊ฐ€์ง€ ์˜ต์…˜์€ ๋ฉ‹์ง„ ๋ Œ๋”๋ง์„ ์‹œ๋„ํ•˜์ง€ ์•Š๋Š” '๋”๋ฏธ' ๋ฆฌํฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ์นด์ฒ˜๋Ÿผ ๋ฆฌํฌํ„ฐ๋ฅผ ์„ ํƒํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋กœ๊ทธ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚˜์ฉ๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ์—์„œ ์–ด๋–ค ํ˜•ํƒœ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ expect ์˜ค๋ฅ˜๋„ ์ˆจ๊ฒจ์ง€๊ณ  ์˜ˆ์™ธ๋Š” ์‚ผ์ผœ์ง‘๋‹ˆ๋‹ค.

test('async', (done) => { setTimeout((() => { expect(1).toEqual(2); throw new Error(); done(); }), 1000); });

์–ด๋””์—๋„ ๋‚ด expect ํ…Œ์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

````
์‹œ๊ฐ„ ์ดˆ๊ณผ - jasmine.DEFAULT_TIMEOUT_INTERVAL์— ์ง€์ •๋œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋‚ด์— ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์ด ํ˜ธ์ถœ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  at Timeout.callback [as _onTimeout] (../../../../../../../../usr/local/lib/node_modules/jest/node_modules/jsdom/lib/jsdom/browser/Window.js:523:19)
  at ontimeout (timers.js:386:14)
  at tryOnTimeout (timers.js:250:5)
  at Timer.listOnTimeout (timers.js:214:5)

````

runInBand ๋„ verbose:false ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ์†Œํ•˜๊ฒŒ ๊ฐ„๋‹จํ•œ ( babel-jest ) ๊ตฌ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

done ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ @richburdon done.fail() ์‹คํŒจ ์‚ฌ๋ก€๋ฅผ ์ปค๋ฒ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@thymike ๋น ๋ฅธ ์‘๋‹ต์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์„œ๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

test('async', (done) => { setTimeout((() => { expect(1).toEqual(2); throw new Error(); done(); }), 1000); });

test('async', (done) => {
  setTimeout((() => {
    expect(1).toEqual(2);
    try {
      throw new Error();
    } catch (error) {
      done.fail(error);
    }
    done();
  }), 1000);
});

์ด๊ฒƒ์ด ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ์ด๊ฒƒ์ด ํ˜„์žฌ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋œ ํ•จ์ˆ˜ ๊ฐ€ Promise๋ฅผ ๋ฐ˜ํ™˜ ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/facebook/jest/issues/2136 ๋˜๋Š” https://github.com/facebook/jest/issues/2059 ์™€ ๊ฐ™์ด ์ด ๋™์ž‘์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ† ๋ก ํ•  ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ณณ์— ์•„์ด๋””์–ด๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thymikee , ๋‚ด ์˜ˆ๋Š” setTimeout ๋†๋‹ด๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋Š” ์•ฝ์†๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์˜ˆ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค...

ํ…Œ์ŠคํŠธ๋œ ํ•จ์ˆ˜๊ฐ€ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ•œ๋‹ค:

````
ํ…Œ์ŠคํŠธ('๋น„๋™๊ธฐ', (์™„๋ฃŒ) => {
ํ•จ์ˆ˜ foo() {
๋ฐ˜ํ™˜ Promise.resolve(1);
}

foo().then(๊ฐ’ => {
๊ธฐ๋Œ€(๊ฐ’).toEqual(2); // ๋ณด๊ณ ๋œ ์ ์ด ์—†์Œ; ๊ทธ๋ƒฅ ์‹œ๊ฐ„ ์ดˆ๊ณผ.
์™„๋ฃŒ();
});
});
````

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ expect ํ˜ธ์ถœ(์ฆ‰, ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด์˜ ์ผ๋ถ€)์— ๋Œ€ํ•œ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•ด์•ผ ํ•˜๋Š”์ง€๋Š” ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฝค ๋ณต์žกํ•ด ๋ณด์ด์ฃ ?

๋”ฐ๋ผ์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” catch ๋ธ”๋ก์œผ๋กœ ์•ฝ์†์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋œ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ๋ž˜ํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. expect ํ˜ธ์ถœ์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด a) ์‹œ๊ฐ„ ์ดˆ๊ณผ; b) ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹ค๋ฅธ ์‹ค์ˆ˜๋ฅผ ํ•˜์ง€ ์•Š๋Š” ํ•œ:

ใ…). ์•„๋งˆ๋„ ์ด๊ฒƒ์„ ๋ฌธ์„œํ™”ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ(https://facebook.github.io/jest/docs/asynchronous.html#content)?

๋น„). ์™œ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋ฐ/๋˜๋Š” ์ข…๋ฃŒ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” console.log์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
v19์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ–ˆ๊ณ  ์ฝ˜์†”์—์„œ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
v20.0.3์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์ถœ๋ ฅ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
--runInBand ๋˜๋Š” --verbose ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

nodejs ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•ด์ฃผ์„ธ์š”. ๋…ธ๋“œ ~7.3์˜ ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@thymikee ๊ทธ๋ž˜์„œ ๊ทธ๋“ค์€ ์ด ๋ฌธ์ œ๋ฅผ ๊ณ ์น  ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ํƒœ์–‘ ์•„๋ž˜์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” typescript์™€ jest์—์„œ ์ œ๊ณตํ•˜๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ts-jest๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒ˜๋ฆฌ๊ธฐ์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@cpojer @lsentkiewicz ์ƒˆ ๋ฒ„์ „์˜ ์ƒˆ ๋ฌธ์ œ์ด๋ฏ€๋กœ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•˜๋‚˜์š”?

@cpojer๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

@marcusjwhelan
v7.10.0์—์„œ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

jest --bail ์‚ฌ์šฉํ•  ๋•Œ ์ฝ˜์†” ์ถœ๋ ฅ์ด ์‚ผ์ผœ์ง€๋Š” ๊ฒƒ์„ ์—ฌ์ „ํžˆ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@cpojer v8.0.0 ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

๋…ธ๋“œ 8.0.0์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ๋ฒ„์ „์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ๋‚˜์œ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด 6.0์—์„œ ์‹คํ–‰ ์ค‘์ด๊ณ  ์ผ๋ถ€ nodejs ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด 7.0์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋†๋‹ด์€ ์ตœ์†Œํ•œ ์ตœ์‹  ๋ฒ„์ „์˜ Node์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ตœ์†Œ 5๋…„ ์ง€์›? @cpojer @taion

์ด๊ฒƒ์€ ๋…ธ๋“œ 7.3์—๋งŒ ์žˆ๋Š” ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ž˜๋ชป๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  7.4 ๋˜๋Š” 7.5๋กœ ๋˜๋Œ๋ ธ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์ด ๋…ธ๋“œ 8์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ด ๋™์ž‘์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๊ณ  ํ†ต๊ณผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด Jest 20 ๋ฐ ๋…ธ๋“œ 8๋กœ ์ ์ ˆํ•œ ์žฌํ˜„์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

@cpojer ์ด ์„ค์ •(macOS)์—์„œ๋Š” console.log ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$ 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.

๋‹จ์ผ JS ํ…Œ์ŠคํŠธ:

$ 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".

๋‹จ์ผ TS ํ…Œ์ŠคํŠธ:

$ 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".

๋…ธ๋“œ v8.1.2์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ v7.10.0๋„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

React ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•˜๋ฉด์„œ Jest๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. Jasmine์€ whatwg-fetch , Node.js ์‹คํ–‰ ๋ฐ Babel ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜์—ฌ HTTP ํ˜ธ์ถœ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ด์ฒด์  ํƒ๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ Jest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜์†”์— ์ธ์‡„ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์„ ๋•Œ ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ ˆ๋Œ€ ๊ธˆ๋ฌผ์ด์—ˆ์Šต๋‹ˆ๋‹ค. Node.js 7.10 ๋ฐ Jest 20.0.4์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ „์—ญ ๋ฒ”์œ„์—์„œ xmlhttprequest ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ€์งœ ์„œ๋ฒ„๋กœ nock ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Jasmine ๋ฐ Node.js ์‹คํ–‰์œผ๋กœ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋Š” ์žก์•„๋‚ด๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ 6๊ฐœ์›” ์ „์— ๋ณด๊ณ ๋œ P0์ด๋ฏ€๋กœ ์•„๋ฌด๋„ Jest๋ฅผ React ํ”„๋กœ์ ํŠธ์˜ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

jest --verbose ์‹คํ–‰ํ•  ๋•Œ Jest 19.0.2 ๋ฐ Node 7.10.0์—์„œ @davidgilbertson ์˜ ์Šคํฌ๋ฆฐ์ƒท(console.log๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ)๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๋„์›€์ด ๋œ ์ : jest --verbose --runInBand ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค(์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ, ๊ทธ ๋‹ค์Œ ๋ชจ๋“  console.log).

@cpojer @thymike ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด ๊ด€์‹ฌ์„ ๋Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@iffy , ๊ท€ํ•˜์˜
BTW ๊ธฐ๋Œ€๊ฐ€ ๋˜์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•œ ๊ธฐ๋Œ€ ์ดํ•˜์˜ ์–ด๋–ค ๊ฒƒ๋„ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@thymikee ์™„๋ฃŒ(์ด๋ฏธ ๋ชจ์นด๋กœ ์ „ํ™˜ํ–ˆ์ง€๋งŒ ๋ถ„๋ฅ˜์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š” ์—†์Œ)

์ €๋„ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ชจ๋‘ ์ฝ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ•ด๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์—์„œ jest ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ๋„ console.log ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ winston ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ winston ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜์†”์— ๋กœ๊ทธ์ธํ•˜๋ ค๊ณ  ํ–ˆ๊ณ , ์ง์ž‘์ปจ๋Œ€, ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ผ๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด logger.js ํŒŒ์ผ ํ™•์ธ:

'use strict';

const winston = require('winston');

const customColors = {
  trace: 'white',
  debug: 'blue',
  info: 'green',
  warn: 'yellow',
  crit: 'red',
  error: 'red'
};

let config = {
  colors: customColors,

  levels: {
    trace: 0,
    debug: 1,
    info: 2,
    warn: 3,
    crit: 4,
    error: 5
  },
  transports: [
  ]
};

config.transports.push(
  new(winston.transports.Console)({
    name: 'consoleLogger',
    level: 'error',
    colorize: true,
    timestamp: true
  })
);

const logger = new (winston.Logger)(config);
winston.addColors(customColors);

module.exports = logger;

ํ…Œ์ŠคํŠธ ํŒŒ์ผ์—์„œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

let log = require('./logger.js');
log.debug('some log here!');

Winston์€ Jest์—์„œ ์ด ๋ฒ„๊ทธ๋ฅผ ์šฐํšŒํ•˜๋Š” process.stdout.write ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ์˜ util ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์ž์‹ ์˜ console.log๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

@eranimo @Daymannovaes ๋ฒ„๊ทธ #3853์„ ๋ด…๋‹ˆ๋‹ค.

๊ทธ ์˜๊ฒฌ์€ 8.1.2์—์„œ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๋งํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฝค ๋‚˜์œ ๋ฒ„๊ทธ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์ด๋ฏธ mocha๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋ฉ๋‹ˆ๊นŒ? ๋˜ํ•œ ๊ทธ๋Ÿด ๋•Œ ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ(์˜ต์…˜ ์•„๋‹˜)๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—‰๋ง์ด ๋  ์ˆ˜์žˆ๋Š” ๋‚˜๋งŒ์˜ ๋กœ๊ฑฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ์นด๋กœ ์ „ํ™˜์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‚ด ๋กœ๊ฑฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์‹คํ—˜์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์ˆ˜์ •ํ•ด ์ฃผ์„ธ์š”. ์ฝ˜์†” ๋กœ๊ทธ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ผ์‹œ์ ์œผ๋กœ 19.0.2๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. :100:

Node.js v7.10์—์„œ v8.1๋กœ ์ด๋™ํ•œ ํ›„์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

7.4.0 -> 8.2.1 ์—์„œ ๋…ธ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ v8.4.0 ๋ฐ Jest 21.0.0-beta.1์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

test.only ํ•˜์—ฌ ๋‹จ์ผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งŒ ์‹คํ–‰ํ•  ๋•Œ console.log ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ --testPathPattern file ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ…Œ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋กœ await Promise.delay(100) ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ด ์˜๊ฒฌ์— ๋Œ€ํ•ด ์œ ๊ฐ์ด์ง€๋งŒ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ํ›„๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์‹œ๊ฐ„์œผ๋กœ Jest๋ฅผ console.log๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ๋Š” while ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํ”„๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐ’์„ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?

@nharrisanalyst ์‚ฌ์šฉ --verbose ํ”Œ๋ž˜๊ทธ

์‘๋‹ต์— ๊ฐ์‚ฌํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ํ›„์—๋งŒ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  console.log()๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด while ๋ฃจํ”„๊ฐ€ ๋ฉˆ์ถ”๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธํ•  ๋•Œ console.log๋กœ ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Jest๋Š” ๋‚ด๊ฐ€ setupFiles , setupTestFrameworkScriptFile ๋˜๋Š” beforeAll ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ฝ˜์†” ์ž‘์—…์„ ๋จน๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์š”์ฒญํ•˜๊ณ  ๋ช…๋ น์„ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ผ์ธ ํ”Œ๋ž˜๊ทธ. "verbose": true ์œ ๋ฌด์— ๊ด€๊ณ„์—†์ด ๋ฐœ์ƒ

Jest๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” console.log()์— ๋Œ€ํ•œ ๊ด€์ฐฐ ๊ณต์œ .

์ด๋ฅผ ์œ„ํ•œ ์ „์ œ ์กฐ๊ฑด์€ --verbose ํ”Œ๋ž˜๊ทธ๋กœ Jest๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ console.log()์˜ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ).
Jest๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์—์„œ๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ console.log()๋Š” ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ํ†ตํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 1๊ฐœ์˜ ํŒŒ์ผ์—์„œ๋งŒ Jest ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ ... ์ „ํ˜€ ํ˜„์‹ค์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ ์˜ต์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • --maxWorkers=1 ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋“  ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ถ”์ธก(*)์€...Jest๊ฐ€ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๋ฉฐ ๊ฐ ํ”„๋กœ์„ธ์Šค์—์„œ stdout์„ ๋ฒ„ํผ๋งํ•˜์—ฌ ์ฃผ ํ”„๋กœ์„ธ์Šค๋กœ ๋‹ค์‹œ ํŒŒ์ดํ”„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์ถ”์ธก(*)์ด ์˜ˆ์ƒ๋œ ๋™์ž‘์ธ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ "์™œ ๋‚ด console.log()๊ฐ€...๊ฐ€๋” ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”์ง€"๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋„๋ก ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋„๋ก ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

OK ์ด๊ฒƒ์€ ์˜ค๋Š˜๋‚  ์ €๋ฅผ ํฌํ•จํ•œ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ณ„์† ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ…Œ์ŠคํŠธ์—์„œ Jest๋Š” ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์ „์— ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋กœ๊ทธ๋ฅผ ์‚ผํ‚ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ €๋ฅผ ์œ„ํ•ด jest ๊ตฌ์„ฑ์—์„œ verbose: true ๋ฐ bail: false ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Jest๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋˜๊ณ  ๋ชจ๋“  ์˜ค๋ฅ˜์™€ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์œ ๋ฆฌํ•˜๋‹ค. ๋˜ํ•œ ์‹คํ–‰ --runInBand ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์•Š๋Š”, --maxWorkers=1 .

๊ฐ€์žฅ ํฐ ๋„์›€์€ bail: false ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ 1 ์ฝ”๋“œ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์ง€๋งŒ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ v8.1.4๋กœ Jest v19.0.2 ์‹คํ–‰.

--verbose --testPathPattern=<path/to/file> ์‹คํ–‰ํ•˜๋ฉด ๋กœ๊ทธ๊ฐ€ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ผ์ผœ์ง‘๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ jest 21.2.0 ๋ฐ ํ˜„์žฌ ๋…ธ๋“œ(4.8.4, 6.11.4 ๋˜๋Š” 8.7.0)์—์„œ ์‹คํŒจํ•˜๋Š” ์ž‘์€ ์žฌ์ƒ์‚ฐ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

verbose ๋˜๋Š” ์ถ”๊ฐ€ jest ๊ตฌ์„ฑ์„ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋…ธ๋“œ ๋ฒ„์ „์„ 7.4.0 ์—์„œ 8.0.0 ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚˜์˜ ๊ด€์ฐฐ์ด๋‹ค.

[email protected]

๋„ˆ๋ฌด ๋‹ต๋‹ตํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์—ฌ์ „ํžˆ Jest๋Š” ๊ฒ‰๋ณด๊ธฐ์— ์ž„์˜์˜ ์žฅ์†Œ์—์„œ console.log ์ถœ๋ ฅ์„ ์ž˜๋ผ๋ƒ…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค! ์ƒ์„ธ ๋ชจ๋“œ๋ฅผ ๋„๋ฉด ๋ชจ๋“  console.log ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค! ์ œ ์ƒ๊ฐ์—๋Š” Jest ์ถœ๋ ฅ์ด ์žฅํ™ฉํ•œ ๋‚ด์šฉ์ผ ๋•Œ ๋งˆ์ง€๋ง‰ ๋ช‡ ๊ฐœ์˜ console.logs์˜ ์ถœ๋ ฅ ์œ„์— ์ด๋ฅผ ์”๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ผ๊ด€๋˜๊ฒŒ ์žฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ทผ๋ณธ์ ์ธ ๋ถˆ์ผ์น˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” expect(<value>).toEqual("someImpossibleValue") ๋ฅผ bail: false expect(<value>).toEqual("someImpossibleValue") ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์žฅ๋‚œ ๊ฒƒ์„ ๊ณ ์น˜๋ ค๊ณ  ํ•  ๋•Œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ๋น ๋ฅด๊ณ  ๋”๋Ÿฝ์Šต๋‹ˆ๋‹ค...

์˜ˆ์ƒ()๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ตฌ์ œ๋˜์ง€ ์•Š๋Š” ๊ฐ€์ •() ํ•จ์ˆ˜๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ v 22.0.4 no console.log.... ๋‚ด๊ฐ€ jest๋ฅผ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์ด์œ  ์ค‘ ํ•˜๋‚˜์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€

@mvolkmann ์ƒ์„ธ ๋ชจ๋“œ์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. non-verbose ๋ชจ๋“œ๊ฐ€ ๋†๋‹ด์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋ผ๋ฉด ๋ณ€๊ฒฝ์„ ๊ณ ๋ คํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ๋„ฃ์€ console.log๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ์‹œ๋„ํ•˜๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ์ด์ž ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์—ฌ๊ธฐ์„œ ๋…ธ๋“œ v9.3.0 ๋ฐ jest v20.0.4)

jest ^21.2.1 ๋ฐ node 8.9.4

Jest๋Š” ์—ฌ์ „ํžˆ ๊ฐ€๋” ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ๋˜์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --verbose ์˜ต์…˜์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์™œ ๋‹ซํ˜”๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@fega ๋Š” ์•„๋ฌด๋„ ์šฐ๋ฆฌ๊ฐ€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—.

$ jest --verbose

์ด ๋ช…๋ น์€ ๋ชจ๋“  ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค

@odykyi ๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋†๋‹ด 22.1.0 ๋ฐ v8.9.4

์ด์ƒํ•œ ํ–‰๋™. verbose ๋ฅผ false ๋‚ด console.log ๋ฌธ์ด ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

[email protected] , [email protected] ๋ฐ --forceExit ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ verbose ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ ํ…Œ์ŠคํŠธํ•œ ์ฝ”๋“œ์—์„œ console.log ์˜ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. false ํ•˜๊ฑฐ๋‚˜ --forceExit ํ”Œ๋ž˜๊ทธ(์ž„์‹œ ์‚ฌ์šฉ)๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

[email protected] , [email protected] ์—์„œ --forceExit ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ verbose๋ฅผ false๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ --forceExit ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ํ•œ ํ…Œ์ŠคํŠธํ•œ ์ฝ”๋“œ์—์„œ console.log์˜ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž„์‹œ๋กœ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค).

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋™์ž‘์„ ๋ด…๋‹ˆ๋‹ค. [email protected] , [email protected].

done() ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— console.logging ํ•˜์ง€๋งŒ --forceExit ์™€ ํ•จ๊ป˜ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --forceExit ๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด console.log ์ถœ๋ ฅ์ด ๋์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Test Suites: 1 passed, 1 total
Tests:       35 skipped, 1 passed, 36 total
Snapshots:   0 total
Time:        2.512s
Ran all test suites matching /test\/api.test.js/i.
  console.log test/api.test.js:247
    bar

๋”ฐ๋ผ์„œ ์ถœ๋ ฅ ๋ฒ„ํผ jest๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ด๋“  ํ”Œ๋Ÿฌ์‹œ๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์—ฌ๊ธฐ์— ๋ถ„๋ช…ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/facebook/jest/blob/497be7627ef851c947da830d4a8e21046f847a78/integration-tests/__tests__/console_log_output_when_run_in_band.test.js#L24

๋ˆ„๊ตฐ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ณต์ œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋น ๋ฅธ ์ถ”๊ฐ€: jest --no-cache ๋Š” ๋˜ํ•œ console.logs๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Node 9.7.1 ๋ฐ babel 7์ด ์žˆ๋Š” jest 22.4.2์—์„œ๋Š” verbose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋‚ด์—์„œ ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€.json

"dependencies": {
  ...
},
"jest": {
  "verbose": true
}

์‚ฌ์šฉ์ž ๊ฐœ์ž…์ด ํ•„์š”ํ•˜์ง€ ์•Š์€์ง€ ์‹œ๊ฐ„์ด ์ง€๋‚ฌ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ผ๊ด€์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋˜ํ•œ ๊ฝค ์˜ค๋žซ๋™์•ˆ ์šฐ๋ฆฌ๋ฅผ ๊ดด๋กญํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ถœ๋ ฅ์ด ๋ฌด์ž‘์œ„๋กœ ์ž˜๋ ธ๊ณ  ์ด์ œ๋Š” ์ถœ๋ ฅ์ด ์™„์ „ํžˆ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ํ•˜๋ ค๋ฉด ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ dev/dexie-search-index ๋ถ„๊ธฐ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.
[email protected] : WorldBrain/Memex.git

src/search/index.test.ts์˜ insertTestData() ์–ด๋”˜๊ฐ€์— ๋‹ค์Œ ํ–‰์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
console.log('!?!?!?!!?!?!!?'); expect(1).toBe(2)

Node.js ๋ฒ„์ „ 6.11 ๋ฐ 8.10์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ ค์ง€๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์„ธ์š”.

@ํ”„๋žญํฌ๋ ˆ๋“œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” verbose: "false" ๋ฅผ ์„ค์ •ํ–ˆ๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์–ด์ œ https://github.com/evanw/node-source-map-support/issues/207 ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์—์„œ ์ด ๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ด์œ ๋Š” Node.js์˜ process.stdout์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๊ฐ€ ๋•Œ๋•Œ๋กœ ๋น„๋™๊ธฐ์ ์ด๊ณ  Node.js ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์—ฌ๋Ÿฌ ํ‹ฑ์— ๊ฑธ์ณ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ process.exit()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด stdout์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์“ฐ๊ธฐ๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

https://nodejs.org/api/process.html#process_process_exit_code

์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ process.exit() ๊ฐ€ --forceExit ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉด ๋กœ๊ทธ ์ถœ๋ ฅ์ด ๋ˆ„๋ฝ๋˜๋Š” ์ด์œ ๊ฐ€ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.

์ด ๊ด€๋ จ ๋ฌธ์ œ์—์„œ ์ €์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์†”๋ฃจ์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/facebook/jest/issues/3853#issuecomment -375183943

@ledbit ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์™€์šฐ, 1๋…„ ๋ฐ˜์ด ์ง€๋‚ฌ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ์ฑ…์ด ์—†๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค์ด์ง€๋งŒ ์•„์ง ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•  ์ผ์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋น„๋™๊ธฐ ์˜ˆ์ œ ๋‚ด์˜ ์ค‘์ฒฉ๋œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ console.log๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ์ฃผ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ™•์‹คํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ ๋‚˜์—๊ฒŒ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ๋„๋ก ๋‚˜์—๊ฒŒ์„œ ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

2018๋…„ 3์›” 22์ผ ์˜ค์ „ 8์‹œ 32๋ถ„์— Dennis Brown [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค์ด์ง€๋งŒ ์•„์ง ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•  ์ผ์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋น„๋™๊ธฐ ์˜ˆ์ œ ๋‚ด์˜ ์ค‘์ฒฉ๋œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ console.log๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ์ฃผ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ™•์‹คํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/facebook/jest/issues/2441#issuecomment-375349444 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/ADrayIO4NBB2dZM1XL8ZQO32W9SUnu2Yks5tg8 ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐ

๋” ๋‚˜์€ ์•„์ง, ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๊ฐ€์‹ญ์‹œ์˜ค! ์—ฌ๊ธฐ ๋‚ด ์ €์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/RALifeCoach/handandfootserver.git

npm์—์„œ jest๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ช…๋ น์ค„์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ console.log๊ฐ€ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ๊ฐ€๋ ค์ ธ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ - ๊ฐœ๋ฐœ ํŒ€์—๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์„ธ์š”.

2018๋…„ 3์›” 22์ผ ์˜ค์ „ 8์‹œ 36 ๋ถ„์— Christopher Oliphant

๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ ๋‚˜์—๊ฒŒ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ๋„๋ก ๋‚˜์—๊ฒŒ์„œ ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

2018๋…„ 3์›” 22์ผ ์˜ค์ „ 8์‹œ 32๋ถ„์— Dennis Brown < [email protected] [email protected] >์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค์ด์ง€๋งŒ ์•„์ง ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•  ์ผ์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋น„๋™๊ธฐ ์˜ˆ์ œ ๋‚ด์˜ ์ค‘์ฒฉ๋œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ console.log๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ์ฃผ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ™•์‹คํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/facebook/jest/issues/2441#issuecomment-375349444 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/ADrayIO4NBB2dZM1XL8ZQO32W9SUnu2Yks5tg8 ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐ

@RALifeCoach๊ฐ€ ์ง€๊ธˆ ๊ท€ํ•˜์˜

์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€๋งŒ ๋งŽ์€ ๋ถ€๋ถ„์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

2018๋…„ 4์›” 14์ผ ํ† ์š”์ผ ์˜ค์ „ 3:10 Simen Bekkhus [email protected]
์ผ๋‹ค:

@RALifeCoach https://github.com/RALifeCoach ์ง€๊ธˆ ๊ท€ํ•˜์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฑฐ๊ธฐ์— ๊ฝค ๋งŽ์€ ๋กœ๊น…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋กœ๊ทธ์ธ์ธ์ง€ ์ง€์ ํ•˜๋Š” ๋งˆ์Œ
ํŠนํžˆ ๋‹น์‹ ์ด ๋ˆ„๋ฝ?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/facebook/jest/issues/2441#issuecomment-381318608 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/ADrayHQCc8C0NmMmrtE7mEo2jN999CChks5tocsKgaJpZM4LVbUv
.

๋ฎ์–ด์“ด๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. ์ฝ˜์†”์— ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์ด ์ง€์›Œ์กŒ์Šต๋‹ˆ๊นŒ?

console.log๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 6์ค„์„ ์ž‘์„ฑํ•˜๋ฉด 6์ด ์ž ์‹œ ๋‚˜ํƒ€๋‚œ ๋‹ค์Œ
ํ…Œ์ŠคํŠธ ์š”์•ฝ์€ 6์ค„ ์ค‘ ์ผ๋ถ€์™€ ๊ฒน์นฉ๋‹ˆ๋‹ค.

2018๋…„ 4์›” 14์ผ(ํ† ) ์˜ค์ „ 8:58 Simen Bekkhus [email protected]
์ผ๋‹ค:

๋ฎ์–ด์“ด๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. ์— ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์ฝ˜์†”์ด ์ง€์›Œ์กŒ์Šต๋‹ˆ๊นŒ?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/facebook/jest/issues/2441#issuecomment-381339074 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/ADrayF0P5SqpHjaAAYcPaIAF7ubSMVRTks5tohyIgaJpZM4LVbUv
.

๋‚˜๋Š” ๋˜ํ•œ @RALifeCoach ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ™”๋ฉด์— ๋‚ด ๋กœ๊ทธ ์ถœ๋ ฅ์ด ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์œ„๋กœ ์Šคํฌ๋กคํ•˜๋ฉด ํ•ด๋‹น ์ถœ๋ ฅ์ด ๋” ์ด์ƒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋…ธ๋“œ 8.11.1์—์„œ๋„ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๊ณ  ์—ฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ์ฐธ์กฐํ•ด์•ผ ํ• ๊นŒ์š”?

๋…ธ๋“œ v8.9.0์—์„œ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ์ถœ๋ ฅ์ด "๋ฎ์–ด์“ฐ๊ธฐ" ๋˜์—ˆ๋‹ค๋Š” @RALifeCoach ์˜ ์˜๊ฒฌ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ๊ฐ ๋กœ๊ทธ์— ํŠน์ • ๋ฌธ์ž์—ด(์˜ˆ: @@@ )๋กœ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ ๋”์ฐํ•œ ํ•ดํ‚น์ž…๋‹ˆ๋‹ค(๋ชจ๋“  ์ฝ˜์†” ์ƒ‰์ƒ์„ ์žƒ๊ฒŒ ๋˜์ง€๋งŒ ์—ฌ์ „ํžˆ ํ…Œ์ŠคํŠธ ์‹คํŒจ์™€ ์ตœ์ข… ํ…Œ์ŠคํŠธ ์š”์•ฝ์€ ํ‘œ์‹œ๋จ). ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€ ์ž‘๋™ํ•œ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์œ„์˜ ์˜๊ฒฌ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์—๋Š” --verbose arg๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค( --watch ๋ฅผ ํ†ตํ•ด react-scripts --watch ์™€ ์•”์‹œ์ ์œผ๋กœ ๊ฒฐํ•ฉ๋จ).

[์ตœ์‹  Jest v23.0.0, ๋…ธ๋“œ v8.11.2๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„๊ธฐ๋œ react-scripts ์‚ฌ์šฉ]

package.json์—์„œ "verbose": true ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ๋Š” ์ถœ๋ ฅ ํ•˜๋‹จ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‹ซํžŒ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚จ์ž 2 ๋…„ ์ „์— ์ƒ์„ฑ ๋œ ์ดํ›„๋กœ ์‚ฌ๋žŒ๋“ค์ด ์ด์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ๊ฒƒ์„ ์—ฌ์ „ํžˆ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Jest์— ์šฐ๋ฆฌ๋ฅผ ๋†€๋ฆฌ๊ณ  console.log()๋ฅผ "๋„์šฉ"ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋…ธ ์˜ต์Šค๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ...

console.log = function(){ /* do nothing */}

console.log๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. https://stackoverflow.com/questions/7089443/restoreing-console-log ์ฐธ์กฐ
-- console.log ์‚ญ์ œ

delete console.log
console.log("Can you hear me now, Jesters...?");

...๊ทธ๋ฆฌ๊ณ  ๊ฐ‘์ž๊ธฐ -- ์งœ์ž”! -- ๋ถˆ์‚ฌ์กฐ์ฒ˜๋Ÿผ -- console.log() ๊ฐ€ Jest์—์„œ ๋‹ค์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค...!
Jest๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์ „์— "console.log(์œ„์น˜ ์ •๋ณด)"๋„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค...

>

console.log __tests__\libarray-helpers.test.js:35
์ง€๊ธˆ ๋‚ด ๋ง ๋“ค๋ฆฌ๋‹ˆ, ๊ด‘๋Œ€๋“ค...?

๋˜ํ•œ ์ตœ๊ทผ์— console.log() ๋Œ€์‹  https://www.npmjs.com/package/logatim ๋™ํ˜• "logatim"์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Jest์˜ ํ•˜์ด์žฌํ‚น ์‹œ๋„์— ๋ฉด์—ญ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...(์ฝ˜์†”.log๋ฅผ ์žฌ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค...)

logatim ๋Œ€ํ•ด ์„ ์ œ์ ์œผ๋กœ console.log๋ฅผ "ํ•˜์ด์žฌํ‚น"ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
"์ •๋ณด" ์ˆ˜์ค€ ๋ฉ”์‹œ์ง€๋ฅผ ๋…น์ƒ‰์œผ๋กœ ๊ธฐ๋กํ•˜๋ ค๋ฉด...

// const logatim = require('logatim') // ES5
import logatim from 'logatim' // ES6
/* ... */
console.log = function(...args){ logatim.green.info("[INFO]",...args) } // ES6

(์ œ ๋†๋‹ด์„ ํ˜ธ์ „์ ์œผ๋กœ ํ•ด์„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค...์กฐ๊ธˆ๋งŒ ๋†๋‹ดํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ข‹์€ ์ œํ’ˆ์— ์ด๋ฆ„์„ ์ง“๋Š” ๊ธฐ์จ์ด ์–ด๋”” ์žˆ์Šต๋‹ˆ๊นŒ...)

์ฆ์˜ค๋ฅผ ํผ๋œจ๋ฆฌ๊ธฐ ์ „์— @yanshuf0 , ๋ถ„๋ช…ํžˆ ํ˜œํƒ์„ ๋ฐ›๊ณ  ์žˆ๋Š” ๋ฌด๋ฃŒ ๊ณต๊ฐœ ๋„๊ตฌ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. Jest๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์œผ๋ฉด ํƒˆํ‡ด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” ์ง์ ‘ ์ˆ˜์ •ํ•˜๋ฉด ํŒ€์ด ์นœ์ ˆํ•˜๊ณ  PR์— ๊ฐœ๋ฐฉ์ ์ž„).

์ด "๋ฎ์–ด์“ฐ๊ธฐ" ๋ฌธ์ œ(Windows 10, VS Code ํ„ฐ๋ฏธ๋„, node.js ํ”„๋กœ์ ํŠธ)๊ฐ€ ์žˆ์—ˆ๊ณ  ๋ฌธ์ œ๋ฅผ ๋งŒ์ง€์ž‘๊ฑฐ๋ฆฌ๋ฉด์„œ ๋ฒ„๊ทธ๊ฐ€ ๋” ์ด์ƒ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. --watch ์‚ฌ์šฉ์„ ์ค‘๋‹จํ–ˆ๊ฑฐ๋‚˜ "verbose": false ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ ค๋„ ๋ฒ„๊ทธ๊ฐ€ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Jest๊ฐ€ ์˜๋„์ ์œผ๋กœ ๋กœ๊ทธ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•œ ํ…Œ์ŠคํŠธ์™€ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ๋ฌป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ๋™์•ˆ ๋ชจ๋“  ์ฝ˜์†” ์ถœ๋ ฅ์ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์•„๋ž˜์— ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์œ„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„๋กœ.

--watchAll ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ด๋ฅผ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

๋ช‡ ๋‹ฌ ๋™์•ˆ jest๋ฅผ ์‚ฌ์šฉํ•œ ํ›„ ๋…ธ๋“œ 8.9์—์„œ ๊ฐ‘์ž๊ธฐ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. 1๋ถ„ ๋™์•ˆ console.log๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๊ณ  ์žˆ์—ˆ๊ณ  ๋‹ค์Œ์—๋Š” ์ž‘๋™์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋๋‚ด๊ณ  ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. --watch ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ๋งค๋ฒˆ ํ…Œ์ŠคํŠธ ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. --watch --verbose false ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ณ  ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ฐพ์•˜ ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ ์ˆ˜์ •

์ด๊ฒƒ์ด 22.4.4 ๋ฐ 23.4.1(์ด ์ฃผ์„ ํ˜„์žฌ)์˜ ๋ฌธ์ œ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ jest --forceExit --runInBand --bail --ci --json --outputFile=/tmp/jest_results.json

๊ฐ™์€ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์ž ์‹œ ๋™์•ˆ ์ž‘๋™ํ–ˆ๋˜ --json ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ ์ผ๋ถ€ ์ข…์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ STDOUT ๋ฐ STDERR ์ถœ๋ ฅ์€ ํ•ญ์ƒ ์–ต์ œ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์€ --watch ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์ผ๋ถ€ ์ถœ๋ ฅ์€ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ๋์— ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.

--silent ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ true๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. false๋กœ ์„ค์ •ํ•˜๋ฉด console.log๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. jest --silent=false

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ˆ˜๋งŽ์€ ๋ณด๊ณ ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋ถ„๋ช…ํžˆ ์—ฌ์ „ํžˆ ๊นจ์ ธ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ ํ์‡„๋œ #2166์˜ ์†์ž„์ˆ˜๋กœ ํ์‡„๋˜์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

@thymikee ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ค์‹œ ๋ฐœ์ƒํ•˜์—ฌ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์‹œ ์—ฌ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

v23์—์„œ๋Š” ๊ฑฐ์˜ ํ•ญ์ƒ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๊ฐ์‹œ ๋ชจ๋“œ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TTY๊ฐ€ ์ฐจ๋‹จ๋˜์ง€ ์•Š๊ณ  ์žฅ๊ธฐ ์‹คํ–‰ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( https://github). com/facebook/jest/pull/6647.
๊ฐ์‹œ ๋ชจ๋“œ์—์„œ ์ž‘์—…์ž๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๊ฒฝ์šฐ๋Š” ์‹คํ–‰ํ•  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •ํ™•ํžˆ 1๊ฐœ ์žˆ๊ณ  ๋น„๊ต์  ๋น ๋ฅผ ๋•Œ์ž…๋‹ˆ๋‹ค(1์ดˆ ๋ฏธ๋งŒ์œผ๋กœ ์‹คํ–‰). ์ด ๊ฒฝ์šฐ console.log ๊ฐ€ ํ•ญ์ƒ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝ์šฐ์—๋Š”, ์‹œ๊ณ„ ๋ชจ๋“œ์—์„œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ๋ก ์•Š์Šต๋‹ˆ๋‹ค. ํŒจํ„ด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋กœ ํ•„ํ„ฐ๋งํ•˜๋ฉด ๋กœ๊น…์ด ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

@davidgilbertson (https://github.com/facebook/jest/issues/2441#issuecomment-286248619)์˜ ์ฃผ์„์— verbose: true ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  my์—์„œ --verbose ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ˆจ๊ฒจ์ง„ ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฝค ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋‚ด package.json์— verbose: true ๊ฐ€ ์žˆ๊ณ  console.log ๋ฌธ์ด ๋•Œ๋•Œ๋กœ ์žˆ๊ณ  ๋•Œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜) - ์ด๊ฒƒ์ด ์•„๋งˆ๋„ ๋น„๋™๊ธฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ €๋„ ๊ฐ€๋” ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ runInBand (https://jestjs.io/docs/en/cli.html#runinband)๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

@ndelangen ๊ทธ๊ฒŒ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋น„๋™๊ธฐ ๋ฌธ์ œ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Jest๊ฐ€ ๋ชจ๋“  console.log๋ฅผ ์ˆ˜์ง‘ํ•œ ๋‹ค์Œ ๋งˆ์ง€๋ง‰์— ์ธ์‡„ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์˜ค?

verbose ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋ฐ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

--runInBand ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ผ๋ถ€ ์ถœ๋ ฅ์ด jest์— ์˜ํ•ด ๋ฎ์–ด์“ฐ์—ฌ์ง€์ง€ ์•Š๋„๋ก ๋ฌด์–ธ๊ฐ€๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ ๋ถ€๋ถ„ ํŒจ์น˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/facebook/jest/issues/3853#issuecomment -413622844

ํŽธ์ง‘ํ•˜๋‹ค:

์‰ฝ๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ: https://github.com/spion/jest-logging-repro

์—ฌ๊ธฐ์—์„œ ์ถœ๋ ฅ ๋ถ„์„: https://gist.github.com/spion/bbb34c5abc1230a37ad5f4f01336b8df

ํŒจ์น˜๋Š” ๋ถ€๋ถ„์ ์ด๊ธฐ ๋•Œ๋ฌธ์—

  • ํ•„์š”ํ•œ ์ถœ๋ ฅ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋งŽ์€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋•Œ๋•Œ๋กœ (๋ถˆํ–‰ํ•˜๊ฒŒ๋„) ๋งˆ์ง€๋ง‰ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ํ›„์— ๋กœ๊ทธ ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์•„๋งˆ๋„ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ถ€๋ชจ์—๊ฒŒ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ํ›„ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ŠคํŠธ๋ฆผ์ด ํ”Œ๋Ÿฌ์‹œ๋œ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@philraj ๋‚˜์—๊ฒŒ ๊ฐ™์€ ๋ฌธ์ œ .. ์˜๋„ ํ•œ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋ณด๋ ค๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ๋กœ๊ทธ์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? 2016๋…„ ์ดํ›„๋กœ ์ด ๋ฌธ์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ด๋ ธ๋‚˜์š”??

์—…๋ฐ์ดํŠธ: ์ด ํŒจ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 8๊ฐœ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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..17d76d36 100644
--- a/packages/jest-worker/src/worker.js
+++ b/packages/jest-worker/src/worker.js
@@ -87,6 +87,13 @@ export default class {
   }

   _initialize() {
+    const forceColor =
+      'FORCE_COLOR' in process.env
+        ? process.env['FORCE_COLOR']
+        : // $FlowFixMe: Does not know about isTTY
+          process.stdout.isTTY
+          ? '1'
+          : '0';
     const child = childProcess.fork(
       require.resolve('./child'),
       // $FlowFixMe: Flow does not work well with Object.assign.
@@ -94,6 +101,7 @@ export default class {
         {
           cwd: process.cwd(),
           env: Object.assign({}, process.env, {
+            FORCE_COLOR: forceColor,
             JEST_WORKER_ID: this._options.workerId,
           }),
           // Suppress --debug / --inspect flags while preserving others (like --harmony).

๊ทธ๋“ค์€ ์ฃผ๋กœ process.env, hg scm ๋ฐ packages/jest-runner/src/__tests__/test_runner.test.js ์—์„œ ์ŠคํŠธ๋ฆผ์„ ์™„์ „ํžˆ ์กฐ๋กฑํ•˜์ง€ ์•Š๋Š” FORCE_COLORS๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ํŒŒ์ดํ”„ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์†๋„๋กœ ๋‹ค์Œ ์ฃผ์— ์ˆ˜์ •๋œ PR์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ์ „์ฒด ๋ณด๊ณ ์„œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ๋‚˜ํƒ€๋‚˜๋Š” ๋กœ๊ทธ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@bkempner๊ฐ€ ๋งํ–ˆ๋“ฏ์ด --watch --verbose false ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

--watch ์ฝ˜์†” ์ถœ๋ ฅ์ด ์ปค์„œ๋ฅผ ์›€์ง์ด๋Š” ๋†๋‹ด์œผ๋กœ ๋ฎ์–ด์“ฐ์—ฌ์ง€๋Š” ๊ฒƒ์€ ๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. --verbose , --maxWorkers 1 , --runInBand ์œ ๋ฌด๋Š” ์„ฑ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ jest --watch | cat ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋“  ์ƒ‰์ƒ์„ ์žƒ์–ด๋ฒ„๋ฆฌ๊ณ  ์ฐฝ ์ƒ๋‹จ์— ๋จธ๋ฌผ์ง€๋งŒ ์ฝ˜์†” ์ถœ๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

๋˜๋Š” TERM=dumb jest --watch . ๋‚˜๋Š” ์ฐฝ ์ƒ๋‹จ์— ๋จธ๋ฌด๋ฅด๋Š” ๊ฒƒ์„ ์žƒ์–ด ๋ฒ„๋ ธ์ง€ ๋งŒ ์ƒ‰์ƒ๊ณผ ์ฝ˜์†” ์ถœ๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ console.debug ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

TERM=dumb ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

FWIW, TERM=dumb๋„ ํ•ด๊ฒฐํ•ด ์ค๋‹ˆ๋‹ค.

jest ๊ตฌ์„ฑ์—์„œ verbose ๋น„ํ™œ์„ฑํ™” 0_o\

package.json "test" ์Šคํฌ๋ฆฝํŠธ์— --verbose false ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ์ ˆ๋Œ€ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ

"scripts": {
    "test": "jest --watch --verbose false"
}

๋งˆ์ง€๋ง‰ ์ฝ˜์†” ์ค‘ ์ผ๋ถ€๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์ด์ƒํ•˜์ง€๋งŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด watch ๋ช…๋ น์—์„œ --verbose false ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

--watch ์—†์ด ์‹คํ–‰ํ•  ๋•Œ ์ž˜ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” watch ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ์•„์ด๋Ÿฌ๋‹ˆํ•œ ์ ์€ console.log๊ฐ€ ์ž‘๋™ํ•  ๋•Œ ๋” ์žฅํ™ฉํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!

Jest 23.6์—์„œ ์žฅํ™ฉํ•œ ์ด ๋ฌธ์ œ๋ฅผ ์•Œ์•„์ฐจ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  23.5๋กœ ๋กค๋ฐฑํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. --clearCache ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์‹œ ์‹คํŒจํ•  ๋•Œ๊นŒ์ง€ ์ž ์‹œ ๋™์•ˆ ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋กœ๊ทธ ์‹คํŒจ ๋˜๋Š” ๊ทธ์™€ ๊ด€๋ จ๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด Jest๊ฐ€ ์บ์‹œ๋ฅผ ์†์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” --verbose false ์‹œ๋„ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

@jamespolanco ์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. --clearCache ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋‹น๋ถ„๊ฐ„). --no-cache ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด ์˜ต์…˜์œผ๋กœ ์ธํ•ด ํ–ฅํ›„ ๋ฌธ์ œ๊ฐ€ ์žฌ๋ฐœํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‚ด ๋ฌธ์ œ๋Š” ๋‚ด console.log ๋ฉ”์‹œ์ง€ ์ค‘ ์ผ๋ถ€๋งŒ ์ธ์‡„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ ํ…Œ์ŠคํŠธ์—์„œ 5๊ฐœ์˜ console.log ๋ผ์ธ์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ฒ˜์Œ 3๊ฐœ ๋ผ์ธ๋งŒ ์ธ์‡„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. --clearCache ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. console.log ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋„ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” console.log, console.debug ๋ฐ console.error๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ --no-cache ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋‚ด ์ฝ˜์†” ๋ฌธ์€ ์™„์ „ํžˆ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ณ„ ๋ชจ๋“œ์—์„œ๋„์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ 23.6.0

๋ˆ„๊ตฐ๊ฐ€ ์ง์ ‘ ๋ณด๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋…น์Œํ–ˆ์Šต๋‹ˆ๋‹ค.
asciicast

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ --watch ์‹คํ–‰ํ•  ๋•Œ๋งŒ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. --verbose false ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด ํ‘œ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‹œ๊ณ„ ๋ชจ๋“œ์— ์žˆ์„ ๋•Œ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฏฟ๊ฑฐ ๋‚˜ ๋ง๊ฑฐ๋‚˜ ๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ node --inspect node_modules/.bin/jest --runInBand mypath/to/my.test.js ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ œ ๊ฒฝ์šฐ์—๋Š” ์‹ค์ œ console.log ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ v9.11.1
๋†๋‹ด: v23.6.0

package.json Jest ๊ตฌ์„ฑ:

  "jest": {
    "preset": "react-native",
    "verbose": true,
    "testEnvironment": "node",
    "haste": {
      "defaultPlatform": "android",
      "platforms": [
        "android",
        "ios",
        "native"
      ],
      "providesModuleNodeModules": [
        "react-native"
      ]
    },
    "setupFiles": ["<rootDir>/__tests__/setup"]
  },

์ด ๋ฌธ์ œ๊ฐ€ ์žฅํ™ฉํ•จ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” verbose๊ฐ€ ์ผœ์ ธ ์žˆ์„ ๋•Œ ์ค„ ์ˆ˜ ๊ณ„์‚ฐ์ด ์—‰๋ง์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์‡„ํ•˜๋Š” ๊ณณ์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ฐŒ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น๋ถ„๊ฐ„ jest-watch-toggle-config ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœํ–‰์„ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

module.exports = {
  "watchPlugins": [
    ["jest-watch-toggle-config", { "setting": "verbose" }]
  ]
}

ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ v ๋ฅผ ๋ˆŒ๋Ÿฌ ์ž์„ธํ•œ ์ •๋ณด ํ‘œ์‹œ๋ฅผ v ๋‹ค์‹œ ๋ˆŒ๋Ÿฌ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„์—๋Š” verbose๋ฅผ ๋„๋ฉด ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--verbose=false enzyme ์–•์€ ํ…Œ์ŠคํŠธ ์‹œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ console.logs๋Š” enzyme mount ์ˆ˜์ • ์—†์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” react-test-renderer๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ react์˜ ๋‚ด์žฅ ๋ Œ๋”๋Ÿฌ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•(ํšจ์†Œ๊ฐ€ ์ฝ˜์†” ๊ธฐ๋Šฅ์„ ์ „ํ˜€ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—)์˜ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด PR์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. - https://github.com/facebook/jest/pull/6871

์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋กœ๊น…๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ž์„ธํ•œ ์ •๋ณด ํ‘œ์‹œ ๋ชจ๋“œ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์ง€๋งŒ(jest 22.4.2 ์‹คํ–‰) ๊ฐ์‹œ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --runInBand ์‹คํ–‰ํ•˜๋ฉด watch ๋ชจ๋“œ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    "test": "jest --watch --runInBand",
    "test:once": "jest",

๋‚˜๋„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ(Jest 23.6.0) "jest --watch --verbose=false"๋กœ ์‹คํ–‰ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ PR์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์›ํ•ฉ๋‹ˆ๋‹ค. jest@beta (์ง€๊ธˆ 24.0.0-alpha.9 )์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์›์‚ฌ๋Š” jest@beta๋ฅผ ์ถ”๊ฐ€

์˜จ. 19. ๋ฐ. 2018 KL. 16:46 skrev Simen Bekkhus [email protected] :

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ PR์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€
jest @beta ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ(ํ˜„์žฌ 24.0.0-alpha.9)

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/facebook/jest/issues/2441#issuecomment-448641697 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AAM5P7ijQjSbWB0-zzDCfC9Uggyk5RGoks5u6l9EgaJpZM4LVbUv
.

>


ํƒ€๋ฅด์ œ์ด ํ›„์„ธ
๋ชจ๋นŒ: 920 63 413

@tarjei ๋„ค:

yarn add --dev jest<strong i="7">@beta</strong>

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐ŸŽ‰

์ด๊ฒƒ์€ ์ •๋ง ์–ด๋ฆฌ์„์€ ์ผ์ด์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์ €๋Š” ์ƒˆ๋กœ์šด (์ €์—๊ฒŒ) ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. jest๋Š” ์ถœ๋ ฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” --silent ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ ์ค‘์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ญ์ œํ–ˆ๋”๋‹ˆ ์ง€๊ธˆ ๋กœ๊ทธ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค ๐Ÿคฆโ€โ™‚๏ธ

์ž์„ธํ•œ ์ •๋ณด ํ‘œ์‹œ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด( jest-watch-toggle-config ์‚ฌ์šฉํ•˜์—ฌ ํ† ๊ธ€) ์ฝ˜์†” ๋กœ๊ทธ์˜ ์ผ๋ถ€๊ฐ€ ๋ฒ ํƒ€์—์„œ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

--verbose=๊ฑฐ์ง“

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‚ด ํ…Œ์ŠคํŠธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋™์•ˆ ์ผ๋ถ€ console.log() ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค(๋…ธ๋“œ v8, [email protected])

const something = () => new Promise(resolve => {
  console.log('NOT logged for some reason!')
  setTimeout(resolve, 100);
});

describe('Something', () => {
  it('logging works in non-async test', function () {
    console.log('logged 1')
    console.log('logged 2')
    expect(true).toBe(true);
  });

  it('console log does not work well in async test', async () => {
    console.log('logged 3')
    await something();
    console.log('NOT logged!')
    expect(true).toBe(true);
  });
});

/* Output:
> logged 1
> logged 2
> logged 3
*/

๋กœ ์ง„ํ–‰ ๋งค์šฐ ๋ญ”๊ฐ€ ์ด์ƒํ•œ, ๊ฑฐ๊ธฐ์— async ์‹œํ—˜์€ ์–ด๋””์—์„œ ์ฒ˜์Œ console.log ์• ํ”„ํ„ฐ ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š”, ๋˜ํ•œ ํ•˜๋‚˜์˜ await ๊ธฐ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

async ํ…Œ์ŠคํŠธ์—์„œ console.log ๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด await ๊ฐ‘์ž๊ธฐ ์ž‘๋™ํ•œ ํ›„ ์ผ๋ถ€ ๋กœ๊ทธ์™€ ๊ฐ™์€ ๋” ์ด์ƒํ•œ ๋™์ž‘์„ ์•Œ์•„์ฐจ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿคทโ€โ™€๏ธ ๐Ÿคทโ€โ™‚๏ธ

๊ทธ๋ž˜์„œ @philwhln์ด 2๋…„ ์ „์— ์œ„์— ์“ด ๊ฒƒ์€

๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ์—์„œ ์ด๊ฒƒ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

--verbose=๊ฑฐ์ง“

์ด ๊ฒฝ์šฐ์—๋„ ์ €๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

@DanweDE ๋Š” verbose๊ฐ€ true ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋„ ์ตœ์‹  ์•ŒํŒŒ yarn add jest<strong i="6">@beta</strong> --dev ๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

--verbose false ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์†Œ ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

์ด๊ฑฐ ๊ณ ์ณ์กŒ๋‚˜์š”? "jest": "23.6.0"์— ์—ฌ์ „ํžˆ console.logs๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@iDVB ์œ„์˜ ์Šค๋ ˆ๋“œ ๋ช‡ ๊ฐœ๋ฅผ ์ฝ์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฒ ํƒ€ ๋ฒ„์ „์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ๋ณด๊ณ ํ•˜์—ฌ @spion ์„ ๋„์šฐ

๋˜ํ•œ --verbose false ๋˜๋Š” --verbose true ๋˜๋Š” ํ”Œ๋ž˜๊ทธ ์กฐํ•ฉ์ด๋‚˜ Node ๋˜๋Š” Jest ๋ฒ„์ „์˜ ์กฐํ•ฉ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์˜ค๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ ํƒ€ ๋ฒ„์ „์„ ์‹œ๋„ํ•˜๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์—†์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ๋ณด๊ณ ํ•˜์„ธ์š”.

ํ…Œ์ŠคํŠธ ์ค‘์ธ ํด๋ž˜์Šค์˜ ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

@philraj ์šฐ๋ฆฌ๋Š” "24.0.0-alpha.9" ์œผ๋กœ ์ „ํ™˜ ํ–ˆ์œผ๋ฉฐ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ ์ดํ›„์— ๋กœ๊ทธ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์—†๋‹ค๋Š” ์˜๋ฏธ์—์„œ.

๋ช…๋ น์ค„ ์ธ์ˆ˜ ์—†์ด 24.0.0-alpha.9 ์—์„œ๋„ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” React์™€ Jest์— ๋น„๊ต์  ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. create-react-app์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ด€๋œ ๋กœ๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊บผ๋ƒˆ๊ณ  ์ด์ œ ๋กœ๊ทธ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์ถœ์ด Jest์˜ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Jest๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์„ค์ • ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 23.6.0 ์ž…๋‹ˆ๋‹ค.

24.0.0-alpha.16 ์‚ฌ์šฉํ•  ๋•Œ verbose=false ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[email protected] ์—์„œ๋„ ์ด์™€ ์ƒ๋‹นํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๋ฅผ

--verbose=false ์ด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค ๐ŸŽ‰

24.1.0 ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž์„ธํ•œ ์˜ต์…˜์ด ์—†์–ด๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— eg๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— console.log ๋ฌธ์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

image

ts-jest ์˜ ์˜ค๋ฅ˜์ด๋ฉฐ ์—ฌ๊ธฐ์„œ๋Š” ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฝ˜์†” ๋กœ๊ทธ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ts-jest ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” jest ์ฃผ๋ณ€์˜ ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ๋‹ด๋‹นํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

ts-jest ์ž‘๋™ ๋ฐฉ์‹ IDK, ๊ทธ๋Ÿฌ๋‚˜ ์œ ํ˜• ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ˆ„๋ฝ๋œ ์ด์œ ๊ฐ€ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” console.log ์—ฌ๊ธฐ์—์„œ ์ผํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์•„์ง๋„ ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ€๋” ๋กœ๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์„ฑ๊ณต์„ ์œ„ํ•œ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ํŒจํ„ด์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Jest 24.7.1 ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ 24.7.1 ๋ฐ 24.2.0-alpha.0 ๋„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

verbose=false ๋ฐ verbose=true ๋ชจ๋‘ ์ˆ˜์ •์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ˆ˜์ • ์—†์ด v10.8.0 ๋ฐ v6.17.1 ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋น ์ง„ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@mulholio ๋กœ์ปฌ์— ์„ค์น˜๋œ jest๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  100% ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ณผ๊ฑฐ์— ๋กœ์ปฌ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋Œ€์‹  ์‹คํ–‰ ์ค‘์ธ ํŒจํ‚ค์ง€์˜ ์ด์ „ ๊ธ€๋กœ๋ฒŒ ๋ฒ„์ „์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Jest์˜ ๊ธ€๋กœ๋ฒŒ ๋ฒ„์ „์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” console.log๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ๋•Œ๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ผ๋งˆ๋‚˜ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๊นŒ?
๋‚ด ํ™˜๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋†๋‹ด 23.6.0
๋…ธ๋“œ v8.13.0
๊ทธ๋ฆฌ๊ณ  ๋‚ด jest.config.js

const path = require('path');

module.exports = {
  moduleNameMapper: {
    "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
    "\\.(less|css|scss)$": "<rootDir>/__mocks__/cssMock.js",
    "^@\/(.*)$": "<rootDir>/src/client/$1",
  },
  bail: true,
  setupTestFrameworkScriptFile: "<rootDir>/setupTests.js",
  collectCoverageFrom: [
    "src/client/**/*.{js,jsx}",
  ],
  verbose: true,
  coverageReporters: ["text", "text-summary", "lcov", "json"],
  coveragePathIgnorePatterns: ["src/client/index.js"],
}

์˜ˆ, verbose:true๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๋„ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฐธ๊ณ : fit ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด console.log ๊ฐ€ ์•„๋ฌด ๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ…Œ์ŠคํŠธ ๋ชจ์Œ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ console.log ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ถ€ ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ "์‚ฌ์šฉ"๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์ง€๋งŒ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

console.log('ok');
console.log('ok');
console.log('eaten up');

[PASS] ๋ฌธ์˜ ๋ฒ„ํผ๊ฐ€ ๋งˆ์ง€๋ง‰ 2๊ฐœ์˜ ์ฝ˜์†” ๋กœ๊ทธ ๋ผ์ธ ์œ„์— ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(Pass ๋ฌธ์˜ ๋์—์„œ ์ฝ˜์†” ๋กœ๊ทธ ๋ผ์ธ ๋ฒˆํ˜ธ์˜ ์ผ๋ถ€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

+1000

์ •๋ง ์–ด๋ฆฌ์„๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ „์— yarn build ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค!

์•„์ง ์•„๋‹ˆ ์ถœ๋ ฅ --verbose=true ๋˜๋Š” --verbose=false ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ [email protected] - ์—ฌ์ „ํžˆ ์›๋ž˜ ๊ธฐ๋ก ๋œ ์‚ผ๋…„ ํ›„ ๋ฌธ์ œ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์™œ.

ํ…Œ์ŠคํŠธ๋ฅผ ์ง๋ ฌ๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด jest ํ”Œ๋ž˜๊ทธ --runInBand ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ console.log์˜ ์ถœ๋ ฅ์„ ๊ฐ–๋„๋ก ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‚˜์—๊ฒŒ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. [email protected]

์‹ค์ œ๋กœ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๋งˆ์ง€๋ง‰ 2์ค„(๊ณ„๋‹จ์‹)์ด ๋ฌด์‹œ๋˜๋ฏ€๋กœ ์ด๊ฒƒ์„ ๋งˆ์ง€๋ง‰ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

it('bugfix for [email protected]', () => {
  console.log("[email protected] bug|last 2 lines get override. remove this once 24.8.0 gets fixed");
  console.log("[email protected] bug|last 2 lines get override. remove this once 24.8.0 gets fixed");
});

ts-jest ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ console.logs๋ฅผ ๋ณด๋ ค๋ฉด ์ง„๋‹จ์„ ๊บผ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
jest.config.js

  globals: {
    'ts-jest': {
      diagnostics: false,
    },
  },

ts-jest ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ console.logs๋ฅผ ๋ณด๋ ค๋ฉด ์ง„๋‹จ์„ ๊บผ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
jest.config.js

  globals: {
    'ts-jest': {
      diagnostics: false,
    },
  },

์ด ์˜ต์…˜์€ ์šฐ๋ฆฌ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ verbose = false ์„ค์ •๋„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ์ฃผ๋ณ€ ํ™˜๊ฒฝ:

  • ๋…ธ๋“œ 10.16.0
  • ๋†๋‹ด 24.8.0
  • ts-jest: 24.0.2
  • ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ 3.5.2
  • @types/jest 24.0.15

[PASS] ๋ฌธ์˜ ๋ฒ„ํผ๊ฐ€ ๋งˆ์ง€๋ง‰ 2๊ฐœ์˜ ์ฝ˜์†” ๋กœ๊ทธ ๋ผ์ธ ์œ„์— ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(Pass ๋ฌธ์˜ ๋์—์„œ ์ฝ˜์†” ๋กœ๊ทธ ๋ผ์ธ ๋ฒˆํ˜ธ์˜ ์ผ๋ถ€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

์ด๊ฒƒ์€ ์ €์—๊ฒŒ ํ•ด๋‹น๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค([email protected]). ๋‚ด ์‹œ์Šคํ…œ์—์„œ [PASS]๊ฐ€ ์žˆ๋Š” ํ„ฐ๋ฏธ๋„ ์ถœ๋ ฅ ๋ผ์ธ์€ ์ง€์›Œ์ง€๊ธฐ ์ „์— ์ผ๋ถ€ ์ฝ˜ํ…์ธ ๋ฅผ ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์†”๋ฃจ์…˜์œผ๋กœ ๊ธฐ๋กํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ’์œผ๋กœ ์‹คํŒจํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ  diff๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

expect(thingIWantToLog).toBe({})

์ด๊ฒƒ ์—ญ์‹œ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: "PASS: ..." ์ถœ๋ ฅ์ด stdout์„ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ "๋งˆ์ง€๋ง‰" console.log๊ฐ€ ๋จนํžˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

--verbose=false ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋งˆ์ง€๋ง‰ console.log์— ํฌ์ƒ์ ์ธ ์ค„ ๋ฐ”๊ฟˆ( \n )์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์ง๋ ฌ๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด jest ํ”Œ๋ž˜๊ทธ --runInBand ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
๋•Œ๋•Œ๋กœ console.log ์ถœ๋ ฅ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ:
npm test -- --verbose --runInBand -t "My Test Name"

๋…ธ๋“œ ๋ฐ NPM ๋ฒ„์ „:
node v8.16.0
npm 6.4.1

์ด๊ฒƒ์ด ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

npm ์„ค์น˜ --save-dev sprintf-js

๋†๋‹ด์œผ๋กœ setupTest.js , ๋˜๋Š” ์–ด๋””์—์„œ๋‚˜:

import {sprintf} from 'sprintf-js';

console.log = (msg, args) => {
    const str = sprintf(msg, args);
    process.stderr.write(str + '\n');
  };

์•„์ง ์•„๋‹ˆ ์ถœ๋ ฅ --verbose=true ๋˜๋Š” --verbose=false ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ [email protected] - ์—ฌ์ „ํžˆ ์›๋ž˜ ๊ธฐ๋ก ๋œ ์‚ผ๋…„ ํ›„ ๋ฌธ์ œ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์™œ.

์ด๊ฒƒ์€ ๋‚ด jest.config.js ์ด๊ณ  ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.
jest -v 23.6.0 & node -v 8.11.2

module.exports = {
  clearMocks: true,
  moduleDirectories: [
    'node_modules',
  ],
  testEnvironment: 'node',
  testMatch: [
    '**/__tests__/**/*.js?(x)',
    '**/?(*.)+(spec|test).js?(x)',
  ],
  verbose: false,
};

๊ทธ๋Ÿฐ ๋‹ค์Œ package.json ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

"scripts": {
  "test": "jest --config ./jest.config.js",
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

yarn test -- -t 'test-suite-name-here'

--verbose=false ์ด ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

Jest๋Š” --silent ์˜ต์…˜์„ ์ „๋‹ฌํ•  ๋•Œ ๋กœ๊ทธ ๋ฐ ๊ฒฝ๊ณ ๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค.
yarn jest ์‹œ๋„ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ ๋„ˆ๋ฌด ์งœ์ฆ๋‚˜... 3๋…„...

๋„๊ธฐ --๋ฌด์Œ
๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š” ts-jest @mr-madmin ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ts ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด!

verbose ๋˜๋Š” silent ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  --runInBand , TERM=dumb , ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๋Œ€ ๋‹จ์ผ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์‹คํ–‰์„ ์‹œ๋„ํ–ˆ์œผ๋ฉฐ console.log ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. it() ๋ธ”๋ก์ด ์•„๋‹Œ ์„ค์ • ๋ธ”๋ก์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ๋ฐฉ๋ฒ•์ด ์‹คํŒจํ•˜๋”๋ผ๋„ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

require('fs').writeFileSync('./output', data);

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ฐ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋•…์ฝฉ์„ ๊นจ๋Š” ์›์‹œ์ธ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํŽธ์ง‘: "jest": "^24.9.0"

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

npm test -- --runInBand -t "My Test Name"

-t ํ”Œ๋ž˜๊ทธ ๋’ค์— ํ…Œ์ŠคํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ๋™์ผํ•œ describe() ์—์„œ ๊ฐœ๋ณ„ ํ…Œ์ŠคํŠธ ๋˜๋Š” ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

verbose ๋˜๋Š” silent ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  --runInBand , TERM=dumb , ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๋Œ€ ๋‹จ์ผ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์‹คํ–‰์„ ์‹œ๋„ํ–ˆ์œผ๋ฉฐ console.log ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์„ค์ • ๋ธ”๋ก์— ๋ฐฐ์น˜๋˜์ง€๋งŒ it() ๋ธ”๋ก์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ๋ฐฉ๋ฒ•์ด ์‹คํŒจํ•˜๋”๋ผ๋„ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

require('fs').writeFileSync('./output', data);

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ฐ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋•…์ฝฉ์„ ๊นจ๋Š” ์›์‹œ์ธ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํŽธ์ง‘: "jest": "^24.9.0"

๋‚˜๋Š” ๋งˆ์นจ๋‚ด ๊ท ์ผ์„ฑ์„ ์œ„ํ•ด ๋ฐฑ์—”๋“œ์—์„œ jest๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ๋ปค๋‹ค. ๋Œ€์‹  ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ˜„์žฌ mocha/proxyquire๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. console.log ์ถœ๋ ฅ์ด ๋ณด์ด์ง€ ์•Š๊ณ (๋ชจ๋“ˆ ๋˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ) ๋ช‡ ์‹œ๊ฐ„์„ ๋ณด๋‚ธ ํ›„์—๋„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๋กœ๊น…๊ณผ ๊ด€๋ จ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค...

"jest": "^24.9.0", ๋…ธ๋“œ 8/10 LTS์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋จ

์‘. ๋‚˜๋„ ๊ฐ€์žฅ์ž๋ฆฌ์— ์žˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  3๋…„ ๋„˜๊ฒŒ ๋ช…๋ฐฑํ•œ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹  ํ•ดํ‚น์„ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์ด ๋” ์ธ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” samlevin๊ณผ pavelloz,
์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
npm test -- --runInBand -t "My Test Name"

-t ํ”Œ๋ž˜๊ทธ ๋’ค์— ํ…Œ์ŠคํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ๋™์ผํ•œ describe()์—์„œ ๊ฐœ๋ณ„ ํ…Œ์ŠคํŠธ ๋˜๋Š” ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์–ผ๋งˆ ์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ์ถœ๋ ฅ์ด ์žˆ๋Š” ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค.
์ฐธ๊ณ : ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ console.lg๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋ณด๊ณ ์„œ์˜ ๋งจ ์œ„์— ์ธ์‡„๋˜๋ฉฐ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋ณด๊ณ ์„œ๋‚˜ ์˜ค๋ฅ˜ ์ด๋ ฅ์„œ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ ๋ถ€๋ถ„์—๋Š” ์ธ์‡„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Jest test console log

๋‚ด ๋…ธ๋“œ ๋ฐ NPM ๋ฒ„์ „:

node v8.16.0
npm 6.4.1

๋‚˜๋Š” ๋งˆ์นจ๋‚ด ๊ท ์ผ์„ฑ์„ ์œ„ํ•ด ๋ฐฑ์—”๋“œ์—์„œ jest๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ๋ปค๋‹ค. ๋Œ€์‹  ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ˜„์žฌ mocha/proxyquire๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. console.log ์ถœ๋ ฅ์ด ๋ณด์ด์ง€ ์•Š๊ณ (๋ชจ๋“ˆ ๋˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ) ๋ช‡ ์‹œ๊ฐ„์„ ๋ณด๋‚ธ ํ›„์—๋„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๋กœ๊น…๊ณผ ๊ด€๋ จ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค...

"jest": "^24.9.0", ๋…ธ๋“œ 8/10 LTS์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋จ

์ด ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ๋‹จ์ผ ์†”๋ฃจ์…˜์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.
image

bash-5.0$ npm -v ; node -v; cat node_modules/jest/package.json |grep version
6.12.0
v12.11.0
  "version": "24.9.0",

ํŽธ์ง‘ํ•˜๋‹ค

์ฐธ๊ณ : ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ console.lg๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋ณด๊ณ ์„œ์˜ ๋งจ ์œ„์— ์ธ์‡„๋˜๋ฉฐ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋ณด๊ณ ์„œ๋‚˜ ์˜ค๋ฅ˜ ์ด๋ ฅ์„œ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ ๋ถ€๋ถ„์—๋Š” ์ธ์‡„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ณด๊ณ ์„œ์˜ ๋งจ ์•„๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€๋„ ์•Š์•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ •ํ™•ํžˆ ๋‚ด ๋กœ๊ทธ๊ฐ€ ๋„์ฐฉํ•œ ๊ณณ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ผ๊ด€๋˜๊ฒŒ/๊ฐ™์€ ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.

image

๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์„ฑ๋Šฅ์ด ์–ผ๋งˆ๋‚˜ ์ €ํ•˜๋˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋‚ ์—๋Š” ๋กœ๊น…์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@pavelloz ๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. --runInBand ์˜ต์…˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

--runInBand, -i                 Run all tests serially in the current process
                                  (rather than creating a worker pool of child
                                  processes that run tests). This is sometimes
                                  useful for debugging, but such use cases are
                                  pretty rare.

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ์€ ํ…Œ์ŠคํŠธ์—์„œ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊ทธํ•ด์•ผ ํ•  ๋•Œ๋งŒ ํ•ด๋‹น ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ชจ๋“  ์‹œ๊ฐ„์—๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

๊ฑด๋ฐฐ

const ๊ตฌ์„ฑ ์š”์†Œ = ์–•์€(...)
console.log(component.debug())

์ด๊ฒƒ์ด ์•„์ง ์ˆ˜์ •๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด ๋†€๋ž์Šต๋‹ˆ๋‹ค.

@ivandosreisandrade runInBand ํ”Œ๋ž˜๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ  ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋˜๋Œ์•„๊ฐ”์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๋…์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ console.log์— ๋Œ€ํ•œ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. --runInBand๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. node@12 ๋ฐ ์ตœ์‹  jest ์‚ฌ์šฉ. ์›น ๊ฐœ๋ฐœ์ž๋กœ ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ํ™”๋ฉด์— ์ธ์‡„ํ•˜์—ฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š” ์ด์œ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ u84six ๋‚ด ์†”๋ฃจ์…˜์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ?
๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ๋‚ด ๋‹ต๋ณ€์— ๋Œ€ํ•œ ๋งํฌ์ž…๋‹ˆ๋‹ค.
https://github.com/facebook/jest/issues/2441#issuecomment -552368939

๊ฑด๋ฐฐ

@ivandosreisandrade ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’ ์ฐธ์กฐ) console.log ํ˜ธ์ถœ์ด ์˜ค๋ฅ˜ ์ „์— ์žˆ๋”๋ผ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํ†ต๊ณผํ•˜๋ฉด ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ๋™์ž‘์€ ๋””๋ฒ„๊น…์— ์ „ํ˜€ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@ivandosreisandrade package.json์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋‚˜์š”? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ฅด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ ์žˆ๋‹ค :

npm ํ…Œ์ŠคํŠธ -- --runInBand -t "๋‚ด ํ…Œ์ŠคํŠธ ์ด๋ฆ„"

ํ•˜์ง€๋งŒ ๋‚ด package.json์—์„œ ์ด์™€ ๊ฐ™์ด ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

" test:unit ": "์ œ์ŠคํŠธ --verbose"

--verbose ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด console.log๊ฐ€ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋Š” ์—ฌ์ „ํžˆ console.log๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋‹ต๋‹ตํ•ด!

@ivandosreisandrade package.json์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋‚˜์š”? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ฅด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ ์žˆ๋‹ค :

npm ํ…Œ์ŠคํŠธ -- --runInBand -t "๋‚ด ํ…Œ์ŠคํŠธ ์ด๋ฆ„"

ํ•˜์ง€๋งŒ ๋‚ด package.json์—์„œ ์ด์™€ ๊ฐ™์ด ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

" test:unit ": "์ œ์ŠคํŠธ --verbose"

--verbose ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด console.log๊ฐ€ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋Š” ์—ฌ์ „ํžˆ console.log๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋‹ต๋‹ตํ•ด!

@ u84six ์ด๊ฒƒ์€ ๋‚ด packadge.json์ž…๋‹ˆ๋‹ค.

"scripts": {
    "test": "jest test --coverage",
    ... 
},
...
"jest": {
    "verbose": true,
    "testMatch": [
      "**/tests/**/*.js?(x)"
    ],
    "moduleFileExtensions": [
      "js"
    ],
    "moduleDirectories": [
      "node_modules"
    ]
  }

testMatch๋Š” .js ๋˜๋Š” .jx ๋˜๋Š” .jsx ํŒŒ์ผ์„ ํ—ˆ์šฉํ•˜๊ณ  moduleFileExtensions๋Š” .js ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ญ”๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์›์ธ๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.man_shrugging:
๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ์–ด๋–ค ํŒŒ์ผ์„ ์ฐพ์•„์„œ ๊ทธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด ๋…ธ๋“œ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค - 13.12.10, npm -6.14.4
๋†๋‹ด -24.9.0

๋‹ค์Œ์€ mock-fs๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
'mock-fs'์—์„œ ๋ชจ์˜ โ€‹โ€‹๊ฐ€์ ธ์˜ค๊ธฐ;
'fs'์—์„œ fs๋กœ * ๊ฐ€์ ธ์˜ค๊ธฐ;
'ํŽŒํ”„'์—์„œ ํŽŒํ”„ ๊ฐ€์ ธ์˜ค๊ธฐ;
* 'util'์—์„œ util๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ;

describe('Test suite for bucket functionality', () => {
    beforeEach(() => {
        mock({
            'sample-file.txt': 'Content of the sample file',
            'sample-upload.txt': ''
        });
    });
    test('test upload', async () => {
        const filePromisy = util.promisify(fs.readFile);
        pump(fs.createReadStream('sample-file.txt'), fs.createWriteStream('sample-upload.txt'));
        filePromisy('sample-upload.txt').then(data => {
                       // when I do a console.log() here I get a warning stating that before I do an expect of data , I get a warning (no longer an error) stating that -_Cannot log after tests are done._

        }).catch(err => {

        });



    });
    test('test download', () => {

    });
});

์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. console.log๊ฐ€ ํ…Œ์ŠคํŠธ ์‚ฌ์–‘์„ ์‹คํ–‰ํ•œ ํ›„์—๋งŒ nextTick()์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•ด์„œ ์ฃ„์†กํ•˜์ง€๋งŒ ์ฝ˜์†” o/p๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  req ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ชจ๋“  ๋‹จ์ผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ์ง€๋ฃจํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

filePromisy ์•ฝ์†์„ ๋†๋‹ด์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ž„์‹œ expect ๋ฌธ์— ๋กœ๊ทธ์ธํ•˜๋ ค๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๊ฐ„๋‹จํžˆ ๋„ฃ์–ด ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ console.log(sketchyVariable) ๋Œ€์‹  expect(sketchyVariable).toEqual(42) .

๋…ธ๋“œ 8์—์„œ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ:
console.log ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋‚ด์žฅ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

const util = require('util')
const myLogger = util.debuglog('myloggername')
myLogger('foobar')

๊ทธ๋ฆฌ๊ณ  ๋””๋ฒ„๊ฑฐ ํ”Œ๋ž˜๊ทธ๋กœ ๋†๋‹ด์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

NODE_DEBUG=myloggername npm test -t "My Test Name"

๋‹จ์ผ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ๋•Œ ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ์‚ฐ๋ฐœ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋•Œ๋Š” ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ , ์–ด๋–ค ๋•Œ๋Š” ์ „ํ˜€ ๋ณด์ง€ ์•Š๊ณ , ์–ด๋–ค ๋•Œ๋Š” ์ผ๋ถ€๋งŒ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ „๋ถ€๋Š” ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‚˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜’

--verbose=false ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” verbose ๋ฅผ true ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ Jest๊ฐ€ ์ž๋™์œผ๋กœ true ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค . ๐Ÿ™ƒ

์‹คํ–‰ ์ค‘์ธ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ true๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

https://jestjs.io/docs/en/configuration#verbose -boolean

๊ด€๋ จ StackOverflow ์Šค๋ ˆ๋“œ: https://stackoverflow.com/questions/48695717/console-log-statements-output-nothing-at-all-in-jest

jest๋Š” ์—ฌ๋Ÿฌ ์ˆ˜์ค€์—์„œ ๋กœ๊น…์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ํ•ด์•ผ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํŒจ ์‹œ ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ์บก์ฒ˜๋œ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์•„๋ฌด ๊ฒƒ๋„ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ์˜ต์…˜์ด ์žˆ์œผ๋ฉฐ
  • ์บก์ฒ˜๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒŒ ๋‹ค์•ผ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ๊ทธ๋“ค์€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ •์ƒ์ ์ธ ์ˆœ์„œ๋กœ ์ธ์‡„ํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ์ถœ๋ ฅ์„ ์–ป์œผ๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋กœ๊น… ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์—์„œ ์ƒ๋‹นํžˆ ๊ณค๊ฒฝ์— ์ฒ˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์ฝ˜์†” ์ถœ๋ ฅ์„ ์•ˆ์ •์ ์œผ๋กœ ์–ป์„ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡ ๋…„ ์ „์— jest ์‚ฌ์šฉ์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋‚ด๊ฐ€ ์–ด๋–ค ์ œ์•ˆ์„ ๋”ฐ๋ž๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

์ด์•ผ๊ธฐ์˜ ๊ตํ›ˆ์€ ๊ธ€๋กœ๋ฒŒ ์ฝ˜์†”์„ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ. ์ผœ๊ฑฐ๋‚˜ ๋Œ ์ˆ˜ ์žˆ๋Š” ๋กœ๊ฑฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜์‹ญ์‹œ์˜ค. ์›ํ•˜๋ฉด ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธ€๋กœ๋ฒŒ ์ฝ˜์†”์€ ๊ฐ„์„ญ์„ ๋ฐ›์•„์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

iOS์šฉ Outlook ๋‹ค์šด๋กœ๋“œ https://aka.ms/o0ukef


๋ณด๋‚ธ ์‚ฌ๋žŒ: earonesty ์•Œ๋ฆผ @github.com
๋ณด๋ƒ„: 2020๋…„ 8์›” 12์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 12:33:23
๋ฐ›๋Š” ์‚ฌ๋žŒ: facebook/ jest [email protected]
์ฐธ์กฐ: Chris Grimes [email protected] ; ๋ฉ˜์…˜ @noreply.github.com
์ œ๋ชฉ: Re: [facebook/jest] ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ console.log๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ(#2441)

jest๋Š” ์—ฌ๋Ÿฌ ์ˆ˜์ค€์—์„œ ๋กœ๊น…์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ์‹คํŒจ ์‹œ ํ‘œ์‹œํ•ด์•ผ ํ•˜๋ฉฐ, ์ „ํ˜€ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋‘ ํ‘œ์‹œํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹ค์•ผ

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ํšŒ์‹ ํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/facebook/jest/issues/2441#issuecomment-673011577 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/AAFCNBK5MQEA6AJHEC52ZWDSALG6HANCNFSM4C2VWUXQ ๊ตฌ๋…์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

@halis ์ €๋Š” ์•ฝ 4๋…„ ๋™์•ˆ Jest๋ฅผ ์ผœ๊ณ  ๋„๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ์ด๊ฒƒ์ด ํ•ญ์ƒ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ Jest ํ…Œ์ŠคํŠธ๋Š” ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ์ƒ๋‹นํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— Jest์˜ ์ฃผ์š” ์—ญํ• ์€ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ ๋ฐ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์ง€๊ธˆ ๊นจ๋Š” ๊ฒƒ์— ๋งŒ์กฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ŠคํŠธ ๊ฒฝํ—˜์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. jest.mock(...) ์˜ autohoisting๊ณผ ๊ฐ™์€ ๊ฒƒ์€ Jest ํ…Œ์ŠคํŠธ๊ฐ€ ์˜๋ฏธ ์ฒด๊ณ„์—์„œ ์—„๊ฒฉํ•˜๊ฒŒ JavaScript(๋˜๋Š” ECMAScript)๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋Š” console.log ์™€ ๊ฐ™์€ void ๋ฐ˜ํ™˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๊ณ  ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์œ ์ผ์ธ๊ฐ€์š”? Jest๊ฐ€ ์—„์ฒญ๋‚œ ์„ฑ๊ณต์„ ๊ฑฐ๋‘” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Jest๋Š” ๋•Œ๋•Œ๋กœ ๋‹น์‹ ์„ ๋†€๋ผ๊ฒŒ ํ•  ๋Šฅ๋ ฅ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Jest ์‚ฌ์šฉ์ž์˜ 90%๋Š” ์ž์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ๋ชจ์˜ ํ˜ธ์ถœ์„ ํ˜ธ์ด์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด AST๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Jest ์‚ฌ์šฉ์ž์˜ 90%๋Š” ์ž์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ๋ชจ์˜ ํ˜ธ์ถœ์„ ํ˜ธ์ด์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด AST๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๋ฌด์—‡

console.debug ๋˜๋Š” console.error ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

๋‚ด ๊ฒฝ์šฐ์—๋Š” --useStderr ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://nodejs.org/api/process.html#process_a_note_on_process_i_o

๋‚˜๋Š” ์˜ค๋Š˜ ๋‹ค์‹œ ์ด๊ฒƒ์œผ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์œผ๋ฉฐ --useStderr ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์ณค์Šต๋‹ˆ๋‹ค. @diomalta ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์—ˆ๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋Ÿญ์ €๋Ÿญ ๋‚ด console.log ๋กœ ์„ค์ •ํ•˜์—ฌ ์‡ผ์— verbose: true ๋‚ด jest.config

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰