๊ธฐ๋ฅ ์ ์์ฒญํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
๋ฒ๊ทธ ๋ณด๊ณ .
ํ์ฌ ํ๋์ ๋ฌด์์ ๋๊น?
ํธ์ถ console.log
๊ธฐ๋ณธ testEnvironment ์ฌ์ฉํ์ฌ jsdom
ํ์ค ์ถ๋ ฅ์ ์ธ์๋์ง ์์ต๋๋ค.
ํ์ฌ ๋์์ด ๋ฒ๊ทธ์ธ ๊ฒฝ์ฐ ์ฌํ ๋จ๊ณ๋ฅผ ์ ๊ณตํ๊ณ https://repl.it/languages/jest๋ฅผ ํตํด repl.it ๋ฐ๋ชจ๋ฅผ ์ ๊ณตํ๊ฑฐ๋ GitHub์์ yarn install
๋ฐ yarn test
ํ ์ ์๋ ์ต์ ์ ์ฅ์๋ฅผ ์ ๊ณต ํ์ธ์. yarn test
.
yarn test
testEnvironment
Jest ๊ตฌ์ฑ ์ค์ ์ node
yarn test
๋ค์ ์คํ์์๋๋ ๋์์ ๋ฌด์์ ๋๊น?
๋ด ํ ์คํธ๊ฐ ์คํ๋๋ ๋์ console.log๊ฐ ํญ์ ์ถ๋ ฅ๋๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค.
์ ํํ Jest ๊ตฌ์ฑ์ ์ ๊ณตํ๊ณ Jest, ๋ ธ๋, yarn/npm ๋ฒ์ ๋ฐ ์ด์ ์ฒด์ ๋ฅผ ์ธ๊ธํ์ญ์์ค.
ํจํค์ง ๋ฒ์ ์ ์ ์ฅ์์์ package.json
๋ฐ yarn.lock
๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ๋
ธ๋ 7.3.0๊ณผ ์ 0.18.1์ ์คํ ์ค์
๋๋ค.
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์ ๊ด๋ จ๋ ์ค๋ฅ์ ๋ํ ๋ชจ๋ ์ ๋ณด์ ์๋ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋๋ด์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ๋ฉด ๊ทธ๋ ์ต๋๋ค. ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ ์ธ์๋ ์๋ฌด๊ฒ๋ ํ์ง ์์ผ๋ฉด ํ๋์ ํ ์คํธ ํ์ผ๋ง ์คํํ ๋ ๋ด ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์๋ ์๋๋ฆฌ์ค๊ฐ ๋ฐ์ํ๋ค๋ ์ฌ์ค์ด ์ด์ํ๊ฒ ๋ณด์ ๋๋ค.
์ด๋ ๋ฌธ์ ์ ๊ด๋ จ ์์ด ์์(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
๊ฐ๋จํ ํ ์คํธ์์ ์ด๊ฒ์ ๋ถ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ณต์กํ ๋น๋๊ธฐ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ค๋ฅธ ์ถ๋ ฅ์ ๋ฎ์ด์ฐ๋ ์ถ๋ ฅ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๋๋๋ก ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ค.
ํ ํ๋ก์ธ์ค์์ ์ค๋ฅ(์คํจํ ์ํ ์ ํ)๋ฅผ ์ถ๋ ฅํ ๊ฒ๊ณผ ๊ฐ์ง๋ง ํ ์คํธ ์ถ๋ ฅ ๋ก๊ทธ์ ์ํด ๋ฐ๋ก ์์ฑ๋ฉ๋๋ค.
๋:
๊ทธ๋ฆฌ๊ณ ๋๋๋ก ํ
์คํธ๊ฐ ์คํ๋๋ ๋์ 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
์๋ํ๋๋ฐ ๋ ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์ฌ์ ํ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋ด
๋๋ค.
ํน์ ํจํด์ ๊ณ ๋ฅผ ์๋ ์์ง๋ง ๋ฐ์ํ ๋ช ๊ฐ์ง ์ฌํญ(๋ด ๊ตฌ์ฑ ์์ ์ค ํ๋์ 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 ์ด์
console.log - 1์ด ๋์ ํ์๋จ(<0.2์ด)
console.log๋ฅผ ์น ํ ํ
์ด ๋ฌธ์ ๋ ์ ๋ง ์ง์ฆ๋์ ์ด ๋ฌธ์ ์ ๋ง์ ์๊ฐ์ ๋ญ๋นํ๊ณ ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ 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()๋ ์์๋๋ก ์๋ํฉ๋๋ค.
๋ค์์ ํตํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
--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
์
๊ทธ๋ ์ด๋ํ๋ฉด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ๊ทธ๊ฒ์ด ๋์ ๊ด์ฐฐ์ด๋ค.
๋๋ฌด ๋ต๋ตํฉ๋๋ค! ๋๋ ๋ชจ๋ ๊ฒ์ ์ต์ ๋ฒ์ ์ ๊ฐ์ง๊ณ ์๊ณ ์ฌ์ ํ 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 ํ๋๊ทธ๋ฅผ ์ฌ์ฉํด ๋ณด์์ต๋๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ด ์ฝ์ ๋ฌธ์ ์์ ํ ๋ฌด์๋ฉ๋๋ค.
์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์์ธํ ์ ๋ณด ํ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์๊ณ ๋ชจ๋์ ์์ ๋๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฏฟ๊ฑฐ ๋ ๋ง๊ฑฐ๋ ๋๋ ๋๋๋ก ์ค๋ฅ๋ฅผ ๋์ง๋ ๊ฒ์ ๊ธฐ๋กํฉ๋๋ค. ๋ํ 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
๋ฌธ์ ์ถ๋ ฅํ์ง ์์ต๋๋ค. ๊ฐ์ ธ์ค์ง ์์ ํด๋์ค์ ๋ํ ์ฐธ์กฐ์
๋๋ค. ์๋ฅผ ๋ค์ด
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
์ค์ ๋ ์๋ํ์ง๋ง ๋์์ด ๋์ง ์์์ต๋๋ค.
์ฐ๋ฆฌ ์ฃผ๋ณ ํ๊ฒฝ:
[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๋ ๋ค๋ฅธ ๋ชจ๋ ๋ณด๊ณ ์์ ๋งจ ์์ ์ธ์๋๋ฉฐ ์ฝ๋ ๊ฒ์ฌ ๋ณด๊ณ ์๋ ์ค๋ฅ ์ด๋ ฅ์๊ฐ ํ์๋๋ ๋ ๋ถ๋ถ์๋ ์ธ์๋์ง ์์ต๋๋ค.
๋ด ๋ ธ๋ ๋ฐ NPM ๋ฒ์ :
node v8.16.0
npm 6.4.1
๋๋ ๋ง์นจ๋ด ๊ท ์ผ์ฑ์ ์ํด ๋ฐฑ์๋์์ jest๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๊ฒ ๋์ด ๊ธฐ๋ปค๋ค. ๋์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ํ์ฌ mocha/proxyquire๋ก ๋ค์ ์ ํํ๊ณ ์์ต๋๋ค.
console.log
์ถ๋ ฅ์ด ๋ณด์ด์ง ์๊ณ (๋ชจ๋ ๋๋ ํ ์คํธ ์ผ์ด์ค์์) ๋ช ์๊ฐ์ ๋ณด๋ธ ํ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋์์ด ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ผ ๋ก๊น ๊ณผ ๊ด๋ จ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ ๊ด์ฌ์ด ์์ต๋๋ค...
"jest": "^24.9.0",
๋ ธ๋ 8/10 LTS์ ๋ํด ํ ์คํธ๋จ
์ด ์ค๋ ๋์ ๋ชจ๋ ๋จ์ผ ์๋ฃจ์ ์ ํ ์คํธํ์ต๋๋ค.
์ด์ ๊ด๋ จํ์ฌ ๋ณ๊ฒฝ๋ ์ฌํญ์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
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๋ ๋ค๋ฅธ ๋ชจ๋ ๋ณด๊ณ ์์ ๋งจ ์์ ์ธ์๋๋ฉฐ ์ฝ๋ ๊ฒ์ฌ ๋ณด๊ณ ์๋ ์ค๋ฅ ์ด๋ ฅ์๊ฐ ํ์๋๋ ๋ ๋ถ๋ถ์๋ ์ธ์๋์ง ์์ต๋๋ค.
๋๋ ๋ณด๊ณ ์์ ๋งจ ์๋๋ฅผ ํ์ธํ์ง๋ ์์์ง๋ง ๊ทธ๊ฒ์ด ์ ํํ ๋ด ๋ก๊ทธ๊ฐ ๋์ฐฉํ ๊ณณ์ ๋๋ค. ๊ทธ๋์ ๋๋ ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์๊ฒ ์ผ๊ด๋๊ฒ/๊ฐ์ ๋ฐฉ์์ด ์๋๋๋ค.
๋์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋ฌธ์ ๋ ์ฑ๋ฅ์ด ์ผ๋ง๋ ์ ํ๋๋์ง์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ ์๋ ๋ก๊น ์ด ๋ ์ค์ํฉ๋๋ค.
@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
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๋ ธ๋ v4.4.7์ ์ฌ์ฉํ๊ณ ์๊ณ ๋ด๊ฐ ์ผ๋ คํ๋ ํ -
console.log
์ฌ์ฉํ ๋ stdout์ ์๋ฌด๊ฒ๋ ํ์๋์ง ์๋ ๊ฒ์ด ๋ฌธ์ ์ ๋๋ค. ์ฝ๋ฉ์ ๋ํ ๋์์ ๋ฐ์ผ๋ ค๋ ๊ฒ์ด ์๋๋ผ ๋ฒ๊ทธ๋ก ๋ณด์ด๋ ๊ฒ์ ๋ณด๊ณ ํ๋ ์ค์ ๋๋ค. ๋ณ๊ฒฝ๋ ์ ์ผํ ๋ค๋ฅธ ์ ์ ์ด์ ์๋ ์ฌ๋ฌ ํ ์คํธ ํ์ผ์ ์คํํ์ง๋ง ์ง๊ธ์ ํ๋๋ง ์คํํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ํ ์คํธ๋ฅผ ๋ค์ ํ์ฑํํ๋ฉดconsole.log
์ถ๋ ฅ์ด ๋ค์ ๋ํ๋๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.