console.log
ã®åºåãèŠã€ãããªããšããåé¡ãããå Žåã¯ãJest24ãè©ŠããŠãã ããã
åé¡ïŒ2441ããã®åå²
@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".
@thymikeeãªããããèµ·ãã£ãŠããã®ããäœãèãã¯ãããŸããïŒ
ããããŸããããtypescriptãåé€ãããªã©ããŠãäŸãæå°éã«æããããšããŸãã
Typescriptãªãã§åçŸã§ããŸã
ããŒã7.4ãã³ã³ãœãŒã«ãã°ãé£ã¹ãããšã確èªã§ããŸãããããŒã7.5.0ã7.10.0ã8.0.0ãããã³8.1.2ã§åäœããŸãã
ããŒãã®ããŒãžã§ã³ãã¢ããã°ã¬ãŒãããŠãã ããã éé
@thymikeeçŸåšã®LTSãªãªãŒã¹ã§ããããŒã6ã¯ã©ãã§ããïŒ ïŒãŸã ååã«ãããã°ããŠããŸããããç§ãããã«ã¶ã€ãã£ãŠããããã§ãããã ããçŸæç¹ã§ã¯LTSãªãªãŒã¹ã«å¶éãããŠãããããã¢ããã°ã¬ãŒãã§ããŸããïŒã
v6.11.0ã§ãã¹ãããŠãã console.log
ã衚瀺ãããŸãã
ãããç§ã¯ä»ã®åé¡ã«ã¶ã€ãã£ãŠãããããããŸããã ããããšãã @ thymikee ãããå°ããããã°ã«æ»ããŸãã
ç§ã¯ç¡æèã®ãã¡ã«ããŒã7.3.0ãå®è¡ããŠããŸããïŒnçµç±ã®ããŒãžã§ã³ãééã£ãŠããŸãïŒãããã°ã«èšé²ãããŸããã§ããã 8.1.1ã«åãæ¿ããŠãå床ãã°ã«èšé²ããŸããã
@thymikee-ãããã©ã®ããã«è§£æ±ºçãããããŸãããïŒ ...ããŒãã®ããŒãžã§ã³ãã¢ããã°ã¬ãŒãã§ããŸãã
ãããããŒãã®ãã°ãšèŠãªãããå°ãªããšãJestèªäœãšã¯äœã®é¢ä¿ããªãã®ããå°ãæ··ä¹±ããŠãããšæããŸãã ããŒãv7.4.0ãšJestv19.0.2ã䜿çšãããšããã¹ãããã³ã³ãœãŒã«ãã°ã衚瀺ãããŸãã Jestãv20.0.4ã«æŽæ°ããã ãã§ïŒä»ã®æ§æãå€æŽããã«ïŒãã³ã³ãœãŒã«ãã°ã衚瀺ãããªããªããŸãã 足ããªããã®ã¯ãããŸããïŒ
@thymikeeã€ãŸããããŒãããŒãžã§ã³ãã¢ããã°ã¬ãŒãããŸããããããŒã8.2.1 Winx64 +Jest20.0.4ã«ã³ã³ãœãŒã«ãã°ã衚瀺ãããŸããã ä»ã®ãšãããã©ãŒã«ããã¯ã䜿çšããå¿ èŠããããŸã
console.log = s => {
process.stdout.write(s + "\n");
};
以åã®ããŒãžã§ã³ã«ã¯ãã®åé¡ããªãã£ãã®ã§ãJestã§ä¿®æ£ããå¿ èŠããããšç¢ºä¿¡ããŠããŸãã
@nowherenoneææ°ã®ã¢ã«ãã¡ãªãªãŒã¹jest@test
ã§çºçãããã©ããããã¹ãã§ããŸããïŒ
@thymikeeããŒã8.2.1
ã§jest@test
ãè©ŠããŠã¿ãŸããããåãçµæã«ãªããŸããã console.log
ã¹ããŒãã¡ã³ãã¯åžžã«é£²ã¿èŸŒãŸããŸãã
@thymikeeåé¡ã¯BufferedConsoleã¢ãžã¥ãŒã«ã«ãããã³ã³ãœãŒã«ã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãæåŸ ããããã©ã¡ãŒã¿ãŒãšäžèŽããŸããã
ç§ã¯PRãéããŸãããå€åããã¯å©ãã«ãªãã§ãããïŒ https ://github.com/facebook/jest/pull/4157
ããã§ã®åé¡ã¯ãJestãã¡ãã»ãŒãžããããã¡ãªã³ã°ããããšã§ããããã€ã«ã¢ãŠãïŒãŸãã¯ç¡éã«ãŒããªã©ïŒãåŒãèµ·ããäœãããããŸãã ã¡ãã»ãŒãžãåºåã¹ããªãŒã ã«çŽæ¥åºåããã«ã¯ã --verbose
ã䜿çšããå¿
èŠããããŸãã
ããã¯ã°ãããŠããŸã-ç§ã¯@cpojerããã®åœ¹ã«ç«ããªãå¿çã®éïŒç§ãè¡ããã¹ãŠã®åé¡ãšPRã§ïŒãšãã©ããããããç§ãã¡ãååã«è³¢ããªãããã«ä»ã®ãã¹ãŠã®äººã«ãã¹ãŠããããããšããŠããããšã«ãã£ãŠåŒãèµ·ããããŸãã
Jestã䜿çšããªãã§ãã ãã-çåã«æã£ãŠãããªãããããç§ã®çãã§ãã æ°ãããã¹ããã¬ãŒã ã¯ãŒã¯ãèŠã€ããŸãã
describe('index', () => {
it('doesnt print anything', () => {
console.log('Hellllooo');
expect(true).toBe(true);
});
});
$ yarn test -- src/__tests__/index.spec.js --verbose
yarn test v0.27.5
warning package.json: No license field
$ jest "src/__tests__/index.spec.js" "--verbose"
PASS src/__tests__/index.spec.js
Index
â doesnt print anything (2ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.969s, estimated 2s
$ jest "--version"
v20.0.4
$ node --version
v7.4.0
NodeLmaoã®æ°ããããŒãžã§ã³ãã€ã³ã¹ããŒã«ããããã«èšããããšç¢ºä¿¡ããŠããŸã-ãªããŠåè«ã§ãððð
@ nf071590ã¯åçŸã§ããããŸã£ããåãJestããŒãžã§ã³ãšNodeããŒãžã§ã³ã§repl.itã§åäœããŸãïŒ https ïŒ//repl.it/KYLc/0
ãããžã§ã¯ãã®ã¡ã³ããã«ã€ããŠæ鳎ãåã«ãçå£ãªåçŸãèããŠãã ããã
也æ¯ïŒ
ããã«ã€ããŠã©ãããããããããããªãã ç§ã¯ããªãã®äŸãæåéããã¡ã€ã«ã«è²Œãä»ããJestãå®è¡ããŸãããããã¯ã1ååã®ææ°ã®ãã¹ã¿ãŒããŒãžã§ã³ã®Jestã§ãç§ã®Macã§å®£äŒãããŠãããšããã«æ©èœããŸãã èŠãïŒ
ç§ãWindowsïŒããŒã8.4ãjest 21.0.0-alpha.2ïŒã䜿çšããŠããã®ã§ã --verbose
ã䜿çšããªãå Žåã console.log
ã¯_æã
_é衚瀺ã«ãªããŸãããäžè²«ããŠè¡šç€ºãããããã§ãããããšã å°ãæéãããã°ãããŒã7ãšå®å®ããjestã䜿çšããçµæã§æŽæ°ã§ããŠããããã§ãã
ããã§ãåãåé¡ããããŸãã
describe('index', () => {
it('doesnt print anything', () => {
console.log('Hellllooo');
expect(true).toBe(true);
});
});
$ node --version
v7.4.0
$ jest "--version"
v21.1.0
çŸåšãããŒãv8.7.0ïŒnpm v5.4.2ïŒã§åãåé¡ãçºçããŠããŸãã
ããã¯ãŸã åé¡ã§ã
è€è£œãæäŸã§ããŸããïŒ
FWIWãç§ã¯ãŸã£ããåãåé¡ãæ±ããŠããã®ã§ãããã«è¡ãçããŸããã ããŒãv7.4.0ã NodeããŒãžã§ã³ãã¢ããã°ã¬ãŒããããšã --verbose
ããªããŠãã console.log
ãæåŸ
ã©ããã«åºåãããŸãã V7.4.0ã ãããã®åé¡ãæ±ããŠããããŒãžã§ã³ã§ã¯ãªããããããŸããããããŒãžã§ã³ã«é¢é£ããŠããããã§ãäžéšã®ããŒãããŒãžã§ã³ã§ã¯åé¡ã§ã¯ãããŸããã ç§ã¯ä»ããŒãv8.3.0ã䜿çšããŠããŸãããããã¯æ©èœããŠããããã§ãã
ããã¯èšã£ãŠããã¢ããã°ã¬ãŒãããåã¯ã @ nf071590ãšåãããŒãžã§ã³ã§ãåãåé¡ããããŸããã repl.itã§çºçããªãçç±ã¯ããããŸãããã圌ã®ã³ã³ãã¥ãŒã¿ãŒã§ã®ã¿çºçããå¥åŠãªããšã§ã¯ãããŸããã
ããã¯ããŒã8.9.0ãšjest21.2.1ãmacOS 10.12.6ïŒ16G1036ïŒã§åçŸã§ããŸã
@SimenBã§ããŸãããããã®åé¡ã¯ãããä»ã®å Žæã§æ»ã¬ãŸã§è°è«ãããŠããããã§ãã jestã®ãã«ãïŒåïŒããã»ã¹ã®æ§è³ªã¯ã console.logs
ãäžæžãããå€æŽãããªã倧èŠæš¡ãªæžãæãããªãããšãæå³ããŸãã ãã®ã¹ã¬ããã«æ¥ãŠã --verbose
ãã©ã°ã䜿çšãããšã console.log
ã§ã®ãããã°ãèš±å¯ãããªããšããåé¡ãåé¿ãããå Žåã¯ã --watch
ãã©ã°ã䜿çšããå¿
èŠããããŸãã ããã«ãããå
ç«¥åŽåè
ã®ããã»ã¹ãäžæžããããã®ãé²ããã³ã³ãœãŒã«ãã°ã§è©³çŽ°ãªåºåã確èªã§ããããã«ãªããŸãã --watch
ã¯éåžžã«é«éã§ãä¿åæã«å€æŽããããã¹ãã®ã¿ãå®è¡ããããšã§ãå€æŽããããã¹ããšã³ãŒãã«æ³šæãåããããšã§ãããå€ãã®äŸ¡å€ãè¿œå ããŸãã
ç§ã®å Žåãåé·ãªã¡ãã»ãŒãžã¯ãã¹ãŠã§ã¯ãããŸãããäžéšã®console.log
ã¡ãã»ãŒãžãæ¶è²»ããããšãããããŸããã 詳现ãªãã·ã§ã³ãåé€ããŸããããå€å°æ©èœããŠããããã§ãã
ããŒãã®ããŒãžã§ã³ãv6ããv9ã«ã¢ããã°ã¬ãŒããããšããããã¹ããã¡ã€ã«ã®1ã€ãæ °ãã«ãªã£ãŠããŸãã
ç§ã¯äœé±éããã®åé¡ãšæŠã£ãŠããŸããã ç§ã¯ãããä»ããŸãããããšãããããæããŸã
--forceExit
ãšçµã¿åããããšãåé¡ã¯--verbose
ã§ã解決ããŸããããã®çç±ã¯ãjestãstderr
ã«æžã蟌ããšãã«ã console.log
ãstdout
$ã«åºåãããããã ãšæããŸãã stderr
ããã³--forceExit
ã®å Žåã stdout
ã«ã³ã³ãã³ãããŸã ãã©ãã·ã¥ãããŠããªãå¯èœæ§ããããŸã
console.logã衚瀺ãããªãããconsole.logããããã¡ãªã³ã°ãããŠã©ã€ãã§è¡šç€ºãããªãããã«ããããã«ã次ã®è§£æ±ºçïŒ --verbose
ãå¿
èŠãšããªãïŒãèŠã€ããŸããã
æå³jest .... --forceExit --setupTestFrameworkScriptFile ./src/tests/jestShim.js
jestShim.js
ã®å
容
const { Console } = require('console');
global.console = new Console(process.stderr, process.stderr);
åãåé¡-console.logã®åºåã¯è¡šç€ºãããŸããã
Node 9.80
Jest 22.4.2
Mac OS 10.13.3
ããã§ææ¡ãããåé¿çã®1ã€ã¯ç§ã®ããã«åããŠããŸããã§ããã
ãã€ãã®ããã«ãç§ãã¡ããã¹ãããããã«ãã«ããŠã³ã§ããè€è£œãäœæããŠãã ããã ãã®åé¡ã¯çºçããŠããªããããä¿®æ£ãéå§ããæ¹æ³ãããããŸããã
@ledbitã®åé¿çã¯ç§ã®ããã«åãã
NPM 5.3.0
ãžã§ã¹ã22.4.3
ç§ã¯ãŸã è€è£œãå¿ èŠãªæ®µéã«ãããŸãã
--forceExit
ã¯ããå£ããŠããããã§ããããã®ãã©ã°ã䜿çšããŠããªããšãã¯ééããŠããŸãã
[ææ°ã®Jestv23.0.0ãããŒãv8.11.2ã䜿çšããããã«ãã©ãŒã¯ãããreact-scripts
ã䜿çšãã]
ç§ã¯ã€ãã«ãã°ã衚瀺ããããã«ãããããã«ç¹å®ã®æååïŒ @@@
ãªã©ïŒãã¿ã°ä»ãããŠå®è¡ããŸããã
yarn test --verbose | grep '@@@'
ããã¯ã²ã©ãããã¯ã§ãïŒã³ã³ãœãŒã«ã®è²ã¯ãã¹ãŠå€±ãããŸããããã¹ãã®å€±æãšæçµçãªãã¹ãã®æŠèŠã¯è¡šç€ºãããŸãïŒãããããŸã§ã«æ©èœããã®ã¯ããã ãã§ãã ç§ã¯äžèšã®ã³ã¡ã³ãã§ä»ã®ãã¹ãŠãè©ŠããŸããã ãã®ãœãªã¥ãŒã·ã§ã³ã«ã¯--verbose
åŒæ°ãå¿
èŠã§ããããšã«æ³šæããŠãã ããïŒ react-scripts
$ãä»ããŠ$ --watch
ãšæé»çã«çµåãããŠããŸãïŒã
ããã¯ãŸã åé¡ã§ãã ããŒã10.1.0ã§jestv22.4.3ã䜿çšããŠããŸãããã¢ããªã®æåã®console.logã¹ããŒãã¡ã³ãã®ã¿ã衚瀺ãããæ®ãã¯ãã¹ãŠç¡èŠãããŸãã ãã®ã³ã°ã©ã€ãã©ãªãstdoutã«ã¹ããªãŒãã³ã°ããããã«èšå®ãããšãããã€ãã®ãã°ã衚瀺ãããŸãããæ£ããé åºã§è¡šç€ºãããŸããã
ãã¹ãã©ã³ããŒãšããŠã®Jestã®ä»äºã¯ãã³ãŒãã®ãããã°ãšä¿®æ£ãæ¯æŽããããšã§ãã ããã¯ããã°ãªãã§ã¯å®çŸã§ããŸããã
@thymikeeãã®å·ãå床éããŠãã ãã
@thanpolasã¯ã調æ»ã§ããããã«ããã°ã瀺ããªããžããªã䜿çšããŠæ°ããåé¡ãèªç±ã«äœæããŠãã ãã:)ã ãŸããææ°ã®Jest23ããå©çšãã ããã
ç§ã¯èªåã®åé¡ãç解ããŸãããã³ã³ãœãŒã«ã«ãªãã€ã¬ã¯ãããããšãã«ããã°ãstdoutã«ã¹ããªãŒãã³ã°ãããŠãããã¬ãŒãä»ããŠçºçããŠããŸãããã¹ããªãŒã ã©ã€ã¿ãŒã®ã³ãŒã«ããã¯ãåŒã³åºãã®ãå¿ãããããã¹ããªãŒã ããã°ã®éä¿¡ãåæ¢ããŸããã
ãã®äŸ¡å€ã«ã€ããŠã¯ãTerminalãšiTerm2ã®éããèŠãŠããŸããã
stdoutãšã³ã³ãœãŒã«ã§éæ³ã䜿ããªãããã«jestã«æ瀺ãããªãã·ã§ã³ã¯ããã¹ãŠã®äººã«ãšã£ãŠéåžžã«æçã ãšæããŸã
ãããç§ããªããšãåçŸãããã°ã®äžäŸã§ãã ãã ããè€æ°ã®ãœãŒã¹ããããã©ããã¯ããããŸããã
https://github.com/spion/jest-logging-repro
yarn install; yarn repro
ã»ããã¢ããïŒJestã¯ç£èŠã¢ãŒãã§ãåé·ãã©ã°ããªã³ã«ãªã£ãŠããŠãå°ãªããšã2ã€ã®ãã¹ããã¡ã€ã«ãå®è¡ãããŠããŸãã
çè«ïŒã¯ãŒã«ãŒã®1ã€ããã®åºåã«ãããã³ã³ãœãŒã«ã«ãŒãœã«ãééã£ãå Žæã«ç§»åããééã£ãã³ã³ãã³ããäžæžããããŸãã
ã³ã³ãœãŒã«ã§ã®èŠ³å¯ïŒ
RUNS tests2/other-tests.js
RUNS lib/example.spec.js
PASS tests2/other-tests.js
bar
â always is true (17ms)
PASS lib/example.spec.js
foo
â adds 5 (5ms)
Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.673s
Ran all test suites.
Watch Usage: Press w to show more.
ã³ã³ãœãŒã«ãã°ãåé€ãããšãèŠèŠçã«ãRUNSããæå³ãããšããã«äžæžããããŸãã
PASS lib/example.spec.js
foo
â adds 5 (5ms)
PASS tests2/other-tests.js
bar
â always is true (5ms)
Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.597s
Ran all test suites.
Watch Usage: Press w to show more.
3ã€ã®ã³ã³ãœãŒã«ãã°ãè¿œå ããå ŽåïŒ
PASS lib/example.spec.js
foo
â adds 5 (5ms)
RUNS tests2/other-tests.js
Test Suites: 1 passed, 1 of 2 total
Tests: 1 passed, 1 total
Snapshots: 0 total
console.log tests2/other-tests.js:5
JEST
PASS tests2/other-tests.jsests.js:6
bar
â always is true (19ms)
Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 totalTime: 1.788sRan all test suites.
Watch Usage: Press w to show more.
ããŒãããŒãžã§ã³ïŒ
30656 % node --version
v8.11.2
@spionãããã«çŠç¹ãåãããŠãããšæããŸãã çŽ æµãªç°¡åãªåçŸã
ãããããŒãv8.11.1LTSã§çºçãã watch
ããã³watchAll
ã¢ãŒãã§ã®ã¿çºçããããšã確èªã§ããŸãã ãŠã©ããã¢ãŒãããªããŠãåé¡ãããŸããã
Nodev10.6.0ãšJest23.4.1ã§ãåãåé¡ãçºçããŸã
ãããç§ãã -w 1
ããã°ãåã³æ©èœãããããšãããããŸãããããã¯ã @spionã®ä»®èª¬ãšäžèŽããŸãã
ããŒã8.11.3
ãžã§ã¹ã23.4.0
ãã¡ã€ã«ã®æ£èŠè¡šçŸã®äžèŽããªã³ã«ãããšïŒ watch
p
ãæŒãïŒããã®åé¡ããŸãã¯å°ãªããšãåæ§ã®åé¡ãèŠã€ãããŸãã all
ããªã³ã«ãããšããã°ã¯æåŸ
ã©ããã«å°å·ãããŸãã --verbose
ã¯ããã«ã¯ãããŸããã
it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
const fV = shallow(<FormValidator/>);
console.log('r1');
console.error('r2');
console.error('r3');
...
all
ãŠã©ããã³ã°ããïŒ log
ãšerror
ã®äž¡æ¹ãåºåããŸãïŒ
PASS src/components/__tests__/FormValidator.js
â Console
console.log src/components/__tests__/FormValidator.js:56
r1
console.error src/components/__tests__/FormValidator.js:57
r2
console.error src/components/__tests__/FormValidator.js:58
r3
file regex
ã¢ãŒãã®å ŽåïŒæåã®log
ã®ã¿ãåºåãã error
ã¯åºåããŸããïŒïŒ
Test Suites: 0 of 1 total
Tests: 0 total
Snapshots: 0 total
console.log src/components/__tests__/FormValidator.js:56
r1
PASS src/components/__tests__/FormValidator.jsidator.js:57
FormValidator
â skipped 3 tests
FormValidator.displayMessage
â should display a ErrorMessage component if state.validated is 'error' (32ms)
â skipped 5 tests
FormValidator.render
â skipped 1 test
it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
const fV = shallow(<FormValidator/>);
console.log('r1');
console.error('r3');
...
all
ïŒ log
ãšerror
ã®äž¡æ¹ãæåŸ
ã©ããã«åºåããŸãïŒïŒ
PASS src/components/__tests__/FormValidator.js
â Console
console.log src/components/__tests__/FormValidator.js:56
r1
console.error src/components/__tests__/FormValidator.js:59
r3
watch
ïŒäžèšã®ã³ãŒãã§ã¯äœãåºåãããŸããïŒïŒ
Snapshots: 0 total
PASS src/components/__tests__/FormValidator.jsator.js:56
FormValidator
â skipped 3 tests
FormValidator.displayMessage
â should display a ErrorMessage component if state.validated is 'error' (20ms)
â skipped 5 tests
FormValidator.render
â skipped 1 test
Test Suites: 1 passed, 1 total
it.only(`should display a ErrorMessage component if state.validated is 'error'`, () => {
const fV = shallow(<FormValidator/>);
console.log('r1');
console.log('r2');
console.log('r3');
console.log('r4');
...
all
ïŒäºæ³ããã4ã€ã®log
ãã¹ãŠãåºåããŸãïŒïŒ
PASS src/components/__tests__/FormValidator.js
â Console
console.log src/components/__tests__/FormValidator.js:56
r1
console.log src/components/__tests__/FormValidator.js:57
r2
console.log src/components/__tests__/FormValidator.js:58
r3
console.log src/components/__tests__/FormValidator.js:59
r4
watch
ïŒæåã®2ã€ã®log
ã®ã¿ãäžèšã®ã³ãŒãã§åºåãããŸãïŒïŒ
Snapshots: 0 total
console.log src/components/__tests__/FormValidator.js:56
r1
console.log src/components/__tests__/FormValidator.js:57
r2
PASS src/components/__tests__/FormValidator.jsator.js:58
FormValidator
â skipped 3 tests
FormValidator.displayMessage
â should display a ErrorMessage component if state.validated is 'error' (31ms)
â skipped 5 tests
FormValidator.render
â skipped 1 test
Test Suites: 1 passed, 1 total
ç§ãäœããããã¯ããããŸããããåè«ãèšå®ããé åºã¯éèŠã ãšæããŸãã äžéšã®æ§æã¯äºãã«äžæžãããå¯èœæ§ããããšæããŸãã ãã¹ããšãã°åºåã®äž¡æ¹ãååŸããŠããŸãã
node -v
v8.11.2
jest -v
23.4.0
以äžã¯ç§ã®package.jsonã®ç§ã®jestæ§æã§ã
`` `
ãåè«ãïŒ{
"transformIgnorePatterns"ïŒ[
ãã
]ã
"setupFiles"ïŒ[
ãã
]ã
"testEnvironment"ïŒ "jsdom"ã
ã詳现ãïŒtrueã
ããããžã§ã¯ããïŒ[
{{
"displayName"ïŒ "ã³ã³ããŒãã³ã"ã
"setupFiles"ïŒ[
ãã
]ã
"modulePaths"ïŒ["
"testMatch"ïŒ["REDUCERS "ã"setupFiles"ïŒ[ãã
}ã
{{
"displayName"ïŒ " ACTIONS "ã
"setupFiles"ïŒ[
ãã
]ã
"modulePaths"ïŒ["
"testMatch"ïŒ["
}
]
}ã
Here are my dependencies
ãäŸåé¢ä¿ãïŒ{
"babel-core"ïŒ "^ 6.26.3"ã
"babel-jest"ïŒ "^ 23.4.0"ã
"babel-loader"ïŒ "^ 7.1.5"ã
"babel-preset-env"ïŒ "^ 1.7.0"ã
"babel-preset-react"ïŒ "^ 6.24.1"ã
"dotenv"ïŒ "^ 6.0.0"ã
"ãšã¯ã¹ãã¬ã¹"ïŒ "^ 4.16.3"ã
"jest"ïŒ "^ 23.4.0"ã
"react"ïŒ "^ 16.4.1"ã
"react-dom"ïŒ "^ 16.4.1"ã
"react-redux"ïŒ "^ 5.0.7"ã
"react-scripts"ïŒ "1.1.4"ã
"redux"ïŒ "^ 4.0.0"ã
"regenerator-runtime"ïŒ "^ 0.12.0"
}ã
output from just running jest
PASS REDUCERS src / reducers / __ tests __ / comments / index.test.js
âã¿ã€ãSAVE_COMMENTïŒ4msïŒã®ã¢ã¯ã·ã§ã³ãåŠçããŸã
âäžæãªã¿ã€ãã®ã¢ã¯ã·ã§ã³ãåŠçããŸã
ãã¹ã¢ã¯ã·ã§ã³src/actions / __ tests __ / index.test.js
saveComment
âæ£ããã¿ã€ãïŒ1msïŒ
âæ£ãããã€ããŒãïŒ1msïŒããããŸã
PASSã³ã³ããŒãã³ãsrc/components / __ tests __ / App / index.test.js
âã³ã¡ã³ããªã¹ãã衚瀺ããå¿
èŠããããŸãïŒ5msïŒ
âã³ã¡ã³ãããã¯ã¹ã衚瀺ããå¿
èŠããããŸãïŒ1msïŒ
PASS COMPONENTS src / components / __ tests __ / CommentBox / index.test.js
âããã¹ããšãªã¢ããããŸãïŒ23msïŒ
âãã¿ã³ããããŸãïŒ3msïŒ
ããã¹ãé å
âãŠãŒã¶ãŒãå
¥åã§ããããã¹ãé åããããŸãïŒ9msïŒ
âãã©ãŒã ãéä¿¡ããããšãããã¹ãé åã空ã«ãªããŸãïŒ5msïŒ
PASS COMPONENTS src / components / __ tests __ / CommentList / index.test.js
âã³ã¡ã³ãããšã«1ã€ã®LIãäœæããŸãïŒ32msïŒ
ãã¹ãã¹ã€ãŒãïŒ5åæ Œãåèš5
ãã¹ãïŒ11åæ Œãåèš11
ã¹ãããã·ã§ããïŒåèš0
æéïŒ3.79ç§
3ã€ã®ãããžã§ã¯ãã§ãã¹ãŠã®ãã¹ãã¹ã€ãŒããå®è¡ããŸããã
console.log src / components / __ tests __ / CommentList / index.test.jsïŒ26
0
console.log src / components / __ tests __ / CommentList / index.test.jsïŒ27
ãã¹ã
`` `
ãã®åé¡ãå床éãå¿ èŠããããŸããã³ã³ãœãŒã«åºåãjestã«é£²ã¿èŸŒãŸããŸããç§ã®ç°å¢ã¯ã次ã®ãšããã§ãã
âããŒã--ããŒãžã§ã³
v8.11.3
ânpxjest--version
23.4.1
ã¯ãªãŒã³ãªã»ããã¢ããã§è©ŠããŸãããããã¹ãŠæ£åžžã«åäœããŸãã
// console.test.js
describe('jest should console output', () => {
test('should console.log output be print', () => {
console.log('console.log')
expect(1).toBe(1)
})
test('should console.error output be print', () => {
console.error('console.error')
expect(1).toBe(1)
})
test('should console.info output be print', () => {
console.info('console.info')
expect(1).toBe(1)
})
})
åºåïŒ
ã ããç§ã¯åé¡ãç§ã®åè«ã®æ§æã«é¢é£ããŠãããããããªããšæã£ãïŒ
{
"globals": {
"API_SERVER_PLACEHOLDER": "SOME_API_ADDRESS"
},
"moduleFileExtensions": [
"js",
"jsx"
],
"transform": {
"^.+\\.jsx?$": "babel-jest"
},
"moduleNameMapper": {
"\\.(css|less|sass|scss|png)$": "<rootDir>/__mocks__/styleMock.js",
"\\.(gif|ttf|eot|svg|png)$": "<rootDir>/__mocks__/fileMock.js"
}
}
ç§ã®æ¬èœã¯verbose
ããã§ãã¯ããããã«ç§ã«èšããŸããããããŠãããåãé€ããåŸããã¹ãŠã¯å€§äžå€«ã§ãã
æ§æverbose
ãtrue
$ã«èšå®ãããŠããjestããŒãžã§ã³23.4.1ã§ã¯ãã³ã³ãœãŒã«åºåã飲ã¿èŸŒãŸããŸãã
ããã©ã«ãã®åºåã¹ããªãŒã ãstdout
ã«å€æŽããããšãææ¡ããŸãïŒ https ïŒ//github.com/noscripter/jest/pull/1
ãŸãå£ããïŒïŒ ãªããããå£ãç¶ããã®ã§ããïŒ
ç§ã¯ãããåé¿ããŸããïŒ
expect(str).toBe("not this");
ð¬
package.jsonã« verbose: true
ãããå ŽåããŸãã¯ãã©ã°--verbose
ïŒãŸãã¯äž¡æ¹ïŒïŒã§jestãå®è¡ããŠããå Žåã¯ãããããåé€ããŠã¿ãŠãã ããã
ããã¯ãã圹ã«ç«ããªãããšãæ°ã«ããªãã§ãã ããã
å®å
šãªãã¹ãã®æŠèŠãã³ã³ãœãŒã«ã«åºåãããåã«ããã°åºåãäžç¬è¡šç€ºãããããšããããããŸãã åºåã衚瀺ããã«ã¯ãé£ç¶ããŠçŽ4ã5åconsole.log
ããå¿
èŠããããŸããããã§ããæåŸã®ãã°ã¯éäžã§åãåãããŸãïŒããšãã°ã倧ããªãªããžã§ã¯ããå°å·ããå Žåã¯ãååã®ã¿ãåãåãããŸãïŒãæåŸã«å°å·ããããã°ã«è¡šç€ºãããŸãïŒã
ãŸããäºæž¬ããã®ã¯éåžžã«å°é£ã§ãã 1ã€ãŸãã¯2ã€ã®console.log
ã§ååãªå Žåãããã°ã3ã€ãã5ã€ãç¶ããŠé
眮ããå¿
èŠãããå ŽåããããŸãã ãŸãããã°ããã¹ãããŠããã³ãŒãã«ããã®ãããã¹ãã±ãŒã¹èªäœã«ããã®ãã¯é¢ä¿ãããŸããã
jestããã°ãå°å·ãããã¹ãã®èŠçŽå šäœãå°å·ããåã«åºåãã¯ãªã¢ããŠããããã§ãããå®éã«ã¯ãããã®ãã°ãä¿æããå¿ èŠããããŸãã
ãã®æç¹ã§ãã³ã³ãœãŒã«ã«ãã°ã衚瀺ããã«ã¯ããã°ãè€æ°åã³ããŒããŠè²Œãä»ããå¿ èŠãããããšã«åæããŸããã
console.log
ã¯ãç¹å®ã®ãã¹ããã¡ã€ã«ã®ã¿ãå®è¡ããå Žåã«æ©èœããŸã
yarn test <your-test-file-name>
äŸãã°yarn test FormValidator
åèãŸã§ã«ã次ã®ã³ãã³ãã䜿çšããŠåçŸãå®è¡ããŸãã
script -qfc 'yarn repro' /dev/null > raw.log
ããã¯zshã§ã-bash script -qfce
ãå¿
èŠãããããŸãã
次ã«ã cat -vet raw.log
ã§ãã°ã衚瀺ããŸããã çµæã¯æ¬¡ã®ãšããã§ãã
^[[2K^[[1G^[[1myarn run v1.7.0^[[22m^M$
^[[2K^[[1G^[[2m$ jest --watch^[[22m^M$
^[[2J^[[3J^[[H^[[1m^[[2mDetermining test suites to run...^[[1m^[[22m^[[999D^[[K^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[0m^[[7m^[[1m^[[32m PASS ^[[39m^[[22m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A foo^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A ^[[32mM-bM-^\M-^S^[[39m ^[[2madds 5 (4ms)^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mlib/^[[22m^[[1mexample.spec.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m0 of 2 total^M$
^[[1mTests: ^[[22m0 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 0s, estimated 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 1s^[[999D^[[K ^[[2mconsole.log^[[22m ^[[2mtests2/other-tests.js:5^[[22m^M$
JEST^M$
^M$
^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[0m^[[7m^[[1m^[[32m PASS ^[[39m^[[22m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A bar^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A ^[[32mM-bM-^\M-^S^[[39m ^[[2malways is true (15ms)^[[22m^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M$
^M$
^[[0m^[[7m^[[33m^[[1m RUNS ^[[22m^[[39m^[[27m^[[0m ^[[2mtests2/^[[22m^[[1mother-tests.js^[[22m^M$
^M$
^[[1mTest Suites: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 of 2 total^M$
^[[1mTests: ^[[22m^[[1m^[[32m1 passed^[[39m^[[22m, 1 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 1s^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^M^[[K^M^[[1A^[[999D^[[K^[[1mTest Suites: ^[[22m^[[1m^[[32m2 passed^[[39m^[[22m, 2 total^M$
^[[1mTests: ^[[22m^[[1m^[[32m2 passed^[[39m^[[22m, 2 total^M$
^[[1mSnapshots: ^[[22m0 total^M$
^[[1mTime:^[[22m 1.128s^M$
^[[2mRan all test suites^[[22m^[[2m related to changed files^[[22m^[[2m.^[[22m^M$
^M$
^[[1mWatch Usage^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22ma^[[2m to run all tests.^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22mf^[[2m to run only failed tests.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m p ^[[2mto filter by a filename regex pattern.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m t ^[[2mto filter by a test name regex pattern.^[[22m^M$
^[[2m M-bM-^@M-: Press^[[22m q ^[[2mto quit watch mode.^[[22m^M$
^[[2m M-bM-^@M-: Press ^[[22mEnter^[[2m to trigger a test run.^[[22m^M$
ã圹ã«ç«ãŠãã°ã ããæç¹ã§å¶åŸ¡ã³ãŒãã®æ°ãééã£ãŠããããã§ãã
æçµçµæã¯æ¬¡ã®ããã«ãªããŸãã
PASS lib/example.spec.js
foo
â adds 5 (4ms)
RUNS tests2/other-tests.js
PASS tests2/other-tests.js2 total
bar
â always is true (15ms)
Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.128s
Ran all test suites related to changed files.
Watch Usage
⺠Press a to run all tests.
⺠Press f to run only failed tests.
⺠Press p to filter by a filename regex pattern.
⺠Press t to filter by a test name regex pattern.
⺠Press q to quit watch mode.
⺠Press Enter to trigger a test run.
ã³ã³ãœãŒã«è¡ãæ¬ èœããŠããããã¹ã2è¡äžã«æžã蟌ãŸããŠããŸããããã¯ããPASSãã衚瀺ããããã«äžã«ç§»åãããšãã«console.logãšã®çµ¡ã¿ãèæ ®ãããŠããªãããšãåå ã§ããå¯èœæ§ããããŸãã
ç·šéïŒæ€çŽ¢ãšæäœãç°¡åã«ããããã«ããã®èŠçŽãèŠç¹ã«è¿œå ããŸããïŒ https ://gist.github.com/spion/bbb34c5abc1230a37ad5f4f01336b8df
psçŸåšã®ãã¹ã¿ãŒã§ãããåçŸããã«ã¯ã匷å¶ãå¿ èŠãªå ŽåããããŸãã ãŠã©ããã¢ãŒãã«å ¥ããšãã¯ããaãããã°ããæŒãç¶ããŸããconsole.logsã¯ãããæç¹ã§å¶åŸ¡äžèœã«ãªãå§ããŸãïŒäºæããªãå Žæãšæéã«è¡šç€ºãããŸãïŒ
ãŸããç§ã¯å¿ããŸãã-ãããWRT端æ«ã®åäœã«éããããããå Žåãç§ã¯ubuntubionicã䜿çšããŠããŸãïŒ
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
ç§ãã @spionã¯ç§ãèŠãŠãããã®ãéä»ãã«ããŸããã ç§ã¯é ãéåæã³ãŒãã§ãã¹ããè¡ã£ãŠããã®ã§ããããçºèŠããã ãã§ãã ã³ã³ãœãŒã«åºåã衚瀺ããããããã¹ãçµæã®æŠèŠã§äžæžããããŸãã
䟡å€ãããã®ã§ã [email protected]
ã«æ»ããŸãããããããããšã§ããã¹ããµããªãŒåºåã[email protected]
ã®ã³ã³ãœãŒã«åºåã«æžã蟌ãŸãããšããåé¡ã解決ããŸãã
æŽæ°-ããçšåºŠã®é²æ©ãéããæå°éã®ããããèŠã€ãããšæããŸãããJestã¬ããŒã¿ãŒãšã¹ããŒã¿ã¹ãžã§ãã¬ãŒã¿ãŒã®çžäºäœçšãç解ããã®ã«å°ãæéãããããŸãã
Jestmonkey-ããã»ã¹stderrããã³stdoutã¹ããªãŒã ã®æžã蟌ã¿ã¡ãœããã«ç¬èªã®ã©ã€ã¿ãŒããããããŸãã ãã®ã©ã€ã¿ãŒã¯ãé²è¡äžã®ãã¹ãã®æ°ãé²è¡ç¶æ³ããŒãçµéæéãªã©ãå«ãjest-cliStatus.jsã®åºåãæžãçããŸãã
ãã®ã¹ããªãŒã ã«æžã蟌ã¿åœä»€ãããå Žåã¯åžžã«ããã®åœä»€ã¯ãã¹ããŒã¿ã¹ïŒANSIå¶åŸ¡ã³ãŒãã䜿çšããŠäžããïŒã®ãåé€ãåœä»€ãå ã®æžã蟌ã¿ãããã³ãã¹ããŒã¿ã¹ãå床æžã蟌ããåœä»€ã«çœ®ãæããããŸãã ãããã£ãŠãã¹ããŒã¿ã¹ãåžžã«ç»é¢ã®äžéšã«ããã®ã«å¯Ÿããããã¹ãã¯ç»é¢ã®äžéšã«ã¹ã¯ããŒã«ããŠããããã«èŠããŸãã
ïŒãã¡ããããããããå°ãè³¢ãã§ã-æžã蟌ã¿ã¯ãããã¡ãªã³ã°ããããããã¡ãªã³ã°ãããããŒã¿ã¯ã¹ããŒã¿ã¹ãšãšãã«100msããšã«1åã ãå®éã«æžã蟌ãŸããŸãïŒ
ãã ãã䞊åãã¹ãã©ã³ããŒïŒ runInBand
ãfalseã«èšå®ããç£èŠã¢ãŒãã§äœ¿çšïŒã¯ä»ã®ã¯ãŒã«ãŒãå®è¡ããŸãã ãããã®ã¯ãŒã«ãŒã¯ãå
ã®ããã»ã¹ã®stdioã¹ããªãŒã ããç¶æ¿ãããããã«èšå®ãããŠããŸãã æ®å¿µãªãããããã¯ã¹ããŒã¿ã¹ãæŽæ°ããããããé©çšãããããŒãžã§ã³ãç¶æ¿ãããšããæå³ã§ã¯ãããŸããã ãããã®æžã蟌ã¿ãçºçããå Žåããããã¯
ããããé©çšãããããŒãžã§ã³ããããã®ttyæžã蟌ã¿ã確å®ã«åä¿¡ããã«ã¯ãåããã»ã¹ã¹ããªãŒã ããç¶æ¿ãã¢ãŒãããããã€ããã¢ãŒãã«åãæ¿ããå¿ èŠããããŸãã ãã®ããã«ããŠãããã»ã¹åºåã¯ãã¡ã€ã³ã®stdout / stderrã«çŽæ¥éä¿¡ãããã®ã§ã¯ãªããåããã»ã¹ã®ã¹ããªãŒã ãšããŠäœ¿çšã§ããŸãã ãŸããã¹ããªãŒã ãæåã§ãã€ãããå¿ èŠããããŸãã
diff --git a/packages/jest-runner/src/index.js b/packages/jest-runner/src/index.js
index 2f4dd724..618a8cbf 100644
--- a/packages/jest-runner/src/index.js
+++ b/packages/jest-runner/src/index.js
@@ -97,11 +97,14 @@ class TestRunner {
// $FlowFixMe: class object is augmented with worker when instantiating.
const worker: WorkerInterface = new Worker(TEST_WORKER_PATH, {
exposedMethods: ['worker'],
- forkOptions: {stdio: 'inherit'},
+ forkOptions: {stdio: 'pipe'},
maxRetries: 3,
numWorkers: this._globalConfig.maxWorkers,
});
+ worker.getStdout().pipe(process.stdout);
+ worker.getStderr().pipe(process.stderr);
+
const mutex = throat(this._globalConfig.maxWorkers);
// Send test suites to workers continuously instead of all at once to track
ã¹ããªãŒã ãæåã§ãã€ãããããšã§ãã¢ã³ããŒããããé©çšãããæžã蟌ã¿ãããŒãã«ãã£ãŠåŒã³åºãããããã«ãªããŸãã
ããã¯å€ãã®çµ±åãã¹ããç ŽããŸãããè²ãæ¬ ããŠããããã«äž»ã«ç ŽãããŸãã ãã£ãŠã
diff --git a/packages/jest-worker/src/worker.js b/packages/jest-worker/src/worker.js
index 5eee64af..5e5126eb 100644
--- a/packages/jest-worker/src/worker.js
+++ b/packages/jest-worker/src/worker.js
@@ -94,6 +94,8 @@ export default class {
{
cwd: process.cwd(),
env: Object.assign({}, process.env, {
+ // $FlowFixMe: Does not know about isTTY
+ FORCE_COLOR: process.stdout.isTTY,
JEST_WORKER_ID: this._options.workerId,
}),
// Suppress --debug / --inspect flags while preserving others (like --harmony).
ãã®æ°ãå€§å¹ ã«æžãããŸãããããã§ãããªãé«ãã§ãïŒ
Test Suites: 51 failed, 232 passed, 283 total
Tests: 149 failed, 7 skipped, 2706 passed, 2862 total
Snapshots: 19 failed, 17 obsolete, 996 passed, 1015 total
ãããåé¿ããæ¹æ³ã¯ãªããšæããŸããåºåãå€§å¹ ã«å€æŽãããããå€ãã®æžã蟌ã¿ãã¹ããŒã¿ã¹æŽæ°ãè¿œå ããããšã«ãªããŸãã
ç·šéïŒåããã»ã¹ã芪ã«æåã¡ãã»ãŒãžãéä¿¡ããŠããããªãçµã£ãåŸãç¹å®ã®ç¶æ³ã§ããŒããåºåã¹ããªãŒã ããã©ãã·ã¥ããã®ãé ããããšããåé¡ããããŸãã
ä¿®æ£ããŠãã ãããããã¯åè«ã§çç£æ§ãæ¬åœã«å·ã€ããŸã
[email protected]ã«ããŠã³ã°ã¬ãŒããããšãã³ã³ãœãŒã«ãã°åºåãè¿ãããŸãã ãã ããåäœãããã«ã¯--envããŒããèšå®ããå¿ èŠããããŸããã ãããä¿®æ£ããŠãã ããã
çŸåšãã³ã³ãœãŒã«ãã°ãä¿¡é Œã§ãããã®ã«ããå¯äžã®æ¹æ³ã¯ãåããã®ã3ã4åç¶ããŠãã°ã«èšé²ããããšã ãšæãããŸãã Jestã¯ãããã®ç¹å®ã®æ°ã ãããããã¯ããŸãã ãŸã éåžžã«è¿·æã§ãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ jest 23.4.1ãšããŒã9.11.1ãå®è¡ããŠããŸãããã³ã³ãœãŒã«ãã°åºåãååŸããå ŽåãšååŸããªãå ŽåããããŸãã
2幎éã³ã³ãœãŒã«ãã°ããªãã£ãã®ã§ãç§ã¯ããåªããéçºè ã«ãªããŸããã ããŒã ãžã§ã¹ãã«æè¬ããŸãïŒ
ããããŸã åé¡ã ãšã¯ä¿¡ããããŸããã ãªãåé¡ã¯è§£æ±ºãããã®ã§ããïŒ
ã€ãŸãã倱æãããã¹ãã誰ããããã°ããããšæãã§ããããã
@jonogilmourãè¿°ã¹ãããã«ãäžåºŠãã°ã«èšé²ããŠã衚瀺ãããªããã2åãã°ã«èšé²ãããšããã®ãã¡ã®1ã€ã衚瀺ãããŸãã
FWIWã-verbose=falseã®åé¿çãæ©èœããŸãã ç§ã®package.json
ïŒ
"scripts": {
...
"test": "react-scripts test --env=jsdom --verbose=false",
ä»ã®ããã€ãã®èŠ³å¯ïŒ
ããã«ã¡ã¯ã¿ããª/女ã®åã
--watchã¢ãŒãã§ãã¹ããå®è¡ãããšãæåãªjestã³ã³ãœãŒã«ãã°ã®åé¡ãçºçããŸããã
解決çã¯ã-watchã®ä»£ããã«--watchAllã䜿çšããããšã§ããã ãã¹ãã®èŠçŽã¯éããªããŸãããããã°ã¯æåŸ
ã©ããã«è¡šç€ºãããŸããã
macOS High Sierra
ããŒãv8.11.3
åè«ïŒ23.6.0
ts-jestïŒ23.10.4
ç§ã«ãšã£ãŠããã¯beforeAll
console.log = s => {
process.stdout.write(s + "\n");
};
ãããŠããã¯ã·ã§ã«ã§æ©èœããŸããïŒ
yarn test > test.log
ç§ã«ãšã£ãŠã¯ã mocha
ã«åãæ¿ããããšã§åé¡ã解決ããŸããã DSLã¯éåžžã«äŒŒãŠãããããåãæ¿ããã®ã¯éåžžã«ç°¡åã§ãã JESTã®expect-libraryã䜿ãç¶ããããšãã§ããŸãïŒ https ïŒ//www.npmjs.com/package/expect
jest
ãåé€ããŠ$ mocha
$ãã€ã³ã¹ããŒã«ããã®ãšã»ãŒåããããç°¡åã§ãã
ç·šéïŒã¹ãã ãã©ããã«ããããããããã§æãç°¡åãªè§£æ±ºçã§ãã
ãã®åé¡ã¯æ¬åœã«çãã§ããJestã¯çç£æ§ãåäžãããããšãç®çãšããŠããã®ã§ãã¡ã³ãããã§ããã ãæ©ããããä¿®æ£ã§ããããšãé¡ã£ãŠããŸãããã®éã§ã¯ãããŸãããïŒ
ãšã«ããã以äžã¯ç§ãä»æžããŠãããã®ã§ãïŒ
export const log = (s: any) => {
console.log(s);
console.log(s);
console.log(s);
process.stdout.write(s + "\n");
};
ããªãã¯ããªãã®æ¹æ³ãã¹ãã ããªããã°ãªããŸããã
--verbose=false
ã§åé¡ãä¿®æ£ãããããšã確èªããŸããã
--verbose=false
ã¯ãããŒãžã§ã³23.6.0
ã§ã¯æ©èœããŸãã
OMGããã¯èŠçã§ãïŒ/2018幎11æ
ãã®å·ãå床éããŠãã ãã
jest.config.js
silent: false
ãèšå®ããŠã¿ãŠãã ãã...ç§ã®å Žåã¯åœ¹ã«ç«ã¡ãŸãã
ã©ã®ãœãªã¥ãŒã·ã§ã³ãæ©èœããŸããã
NodeJSïŒv8.12.0
ãžã§ã¹ãïŒv23.4.1
ç§ã¯äœã¶æãJestã䜿çšããŠããŠãããã¯çŽ æŽãããããšã§ãããã®ãã°ã¯_éåžžã«è¿·æã§ã_ããç§ããã€ã䜿çšããŠããåé¿çã¯ãæ¯åã³ã³ãœãŒã«ã«ãã°ãèšé²ããããããžã£ã³ã¯ã¢ãµãŒã·ã§ã³ãäœæããããšã§ãã
ããšãã°ãæš¡æ¬é話ããã°ã¢ãŠãããããšãããšã次ã®ããã«ãªããŸãã
expect('hello').toEqual(childFunc.mock.calls[0])
ãåºåãããŸãïŒ
ããã¯çæ³çã§ã¯ãããŸããããããã¯ä»äºãæãéããŠãç§ãç§ã®ãã¹ããæžãçµããããšãå¯èœã«ããŸãã
--watchãã©ã°ãæå®ããŠJestãå®è¡ããŸãã
JestããŒãžã§ã³23.5.0
ããŒãããŒãžã§ã³8.11.3
ããã¯ããã³ãããã®äžã§èµ·ãã£ãŠãããããŸãã«ãå€ãã®éæ³ãã®ãŸãšããªäŸã§ãããäœããããŸããããªãã£ããšãã®ãã®çµæã§ãã console.logã®åºåãã°ã«ãŒãåããããšã¯ãconsole.logã¹ããŒãã¡ã³ããæ¬ èœããŠãã1幎åã®äŸ¡å€ããããšã¯ç¢ºä¿¡ããŠããŸããã ð
äžèšã«åæããŸã-ããã¯èŠäºãªãã®ã§ã¯ãããŸããããJestãå®å šã«äžèŠãªæ¹æ³ã§èŠçã«ããŸãã
ç§ã®ãåé¿çãã¯ãããžãã¯ã®å€ããlog4js
ã䜿çšããããšã§ãããããã£ãŠãJestããµãŒããŒåŽã®ã³ãŒãã«æ²ããå Žåã¯åé¡ãããŸããã æ²ããããšã«ãç§ã¯å€§éã®ã¯ã©ã€ã¢ã³ãåŽã³ãŒããæã£ãŠãããæçµçã«ã¯ãã®ãã¡ã®1ã€ã衚瀺ãããããã«èŠãããããéåžžã¯åconsole.log
ã®4ã€ã®ã³ããŒãã³ããŒããŠè²Œãä»ããŸãã
expect
ã䜿çšããŠæ
å ±ããã°ã«èšé²ããããšã¯ããã¹ãå
ãããã°ãèšé²ããå Žåã¯åé¡ã®ãªãåé¿çã§ãïŒç¹ã«ããšãã£ã¿ãŒã§logjest
ã®ãããªããŒã¯ãŒãã䜿çšããŠã¹ãããããäœæã§ããããïŒããã¹ããåŒã³åºããŠããå®éã®é¢æ°å
ããããã«æ·±ãæãäžããŠãã°ãèšé²ããå¿
èŠãããå Žåã¯åžžã«äžååã§ãã
CI=true yarn run test
ã©ãã§ããïŒ
åã«èšã£ãããšã¯ç³ãèš³ãããŸãããããã¹ãã±ãŒã¹ã®ã¿ã€ãã«ããªããŠãããŸãæ©èœããŸããã€ãŸããã-verboseããªãã·ã§ã³ããªããšã-verboseã¯ããçš®ã®ãã©ãŒããããè¡ããstdoutã¹ããªãŒã ã眮ãæãããšæããŸãã
ã§ããããç§ã«ãšã£ãŠã¯2ãæã®ããã§ããã¹ãŠãããŸãæ©èœããŠããŸãã
ãããŠã誰ãããã®ãªãã·ã§ã³ã䜿çšãããå Žåã¯ã次ã®ããã«npmã³ãã³ãã«è¿œå ããã ãã§ãïŒnpm run testïŒintegration --- watchAll --verbose --coverage --etc
åé¡ã®ãã人ã¯[email protected]
ããã¹ãã§ããŸããïŒ ïŒ6871ãå«ãŸããŠããŸã
@ jamesta696ããã«ã¡ã¯ãããã§ã®è°è«ã¯ãåé¡ãã«é¢ãããã®ãªã®ã§ãããã§ãjestãã®ã¿ã°ã䜿çšããŠStackOverflowã«ãã®ãããªè³ªåãæçš¿ããå¿
èŠããããšæããŸããããã§ãã誰ããããªããå©ããããšãã§ããããšã¯ç¥ã£ãŠããŸãããããã§ã®åé¡ã¯äž»ãªåé¡ãè°è«ãããŠããªããããééãããŸãã
ãããŠä»ã®ãšãããç§ã¯reactãããã³ããšã³ãçšã®äœããéçºããŠããªãã®ã§ããã®è³ªåã«å¯Ÿããçããäžããããšã¯ã§ããŸããããŸããç§ã¯jestã®ã¡ã³ããŒã§ã¯ãããŸããããã«ãŒã«ã«åŸãããã«ããŸãããã
@SimenB jestãïŒããªãã®èšåããããŒãžã§ã³ã«ïŒæŽæ°ããåé¡ã®ãããããžã§ã¯ãã«ããã€ãã®console.log
ã¹ããŒãã¡ã³ããé
眮ããŠã¿ãŸããã ãããŸã§ã®ãšãããä¿®æ£ãããŠããããã§ãããã¹ãŠã®console.log
ã衚瀺ãããŸãã åŒãç¶ã䜿çšããåé¡ãåçºããå Žåã¯ãç¥ããããŸãã
åèïŒç§ã¯jest --watchAll
ã䜿çšããŠããŸããïŒãããŠä»ã䜿çšããŠããŸãïŒ
@tobyhinloopen@SimenBã«èšåããé²æ©ã®èšŒæ ãèŠãã®ã¯ã¯ãŒã«ã§ãã
ããã¯çŽ æŽããã@tobyhinloopenã§ãïŒ
ãŸãã jest @ 24.0.0-alpha.9ãæ£åžžã«æ©èœãã-verbose=falseãªãã§ãã¹ãŠã®ã³ã³ãœãŒã«ãã°ã衚瀺ã§ããããšã確èªã§ããŸãã
ãŸãã jest @ 24.0.0-alpha.9ãæ£åžžã«æ©èœãã-verbose=falseãªãã§ãã¹ãŠã®ã³ã³ãœãŒã«ãã°ã衚瀺ã§ããããšã確èªã§ããŸãã
+1ã 確èªãã§ããŸãã ãããæ©èœããŠããã®ãèŠãŠããããã§ãã ããä»äºã ããžã§ã¹ãã®çããïŒ ð
ç§ã確èªã§ããŸãïŒ ããã¯ã¯ãªã¹ãã¹ã®ãããªãã®ã§ãã ð
ð
create-react-appãæŽæ°ããããŸã§åŸ ã€å¿ èŠã¯ãããŸãã
jestããŒãžã§ã³24.0.0
ãå®è¡ããŠããŸãããããã§ãconsole.log
ãŸãã¯console.error
ã衚瀺ãããŸããã ç§ãééã£ãŠããã®ã§ã¯ãªãããšæããŸãã
圌ããå²ç¬ãããŠããªãããšã確èªããŠãã ãã
ããã¯æ¬åœã«å¥åŠã§ãã éåæåŠçã«åé¡ãããããã§ãã ãšã©ãŒã衚瀺ã§ããŸããã try/catch
ãããã¯ã«ã©ããããŠãããšã©ãŒã¯è¡šç€ºãããŸããã
ãã©ã¡ãŒã¿generator
ã¯ç¢ºãã«æ£ããã§ããéåæé¢æ°åŒã³åºããåé€ãããšãæ£ãããã°ã«èšé²ãããŸãã ãŸããforã«ãŒãã®å€åŽã«ããå Žåã¯ãæ£ããæååãè¿ããŸãã
JestããŒãžã§ã³ã¯24.0.0
ãããŒãã¯10.5
@tiborsaas console.log
ãå®è¡ãããåã«ããã¹ããçµäºããŠããå¯èœæ§ããããŸãã
changedGenerators
ãè¶
ããå埩ãåŸ
ã¡ããå Žåã¯ã次ã®ãããªãã®ãå¿
èŠã«ãªããŸãã
await Promise.all(changedGenerators.map(async (generator) => {/* ... */}))
è¿ä¿¡ããããšãããããŸãããå®éã«ã¯ããã§ã¯ãããŸããããšã©ãŒãçºçãããšã console.log
ã衚瀺ãããªããªããŸãã forEach
ã³ãŒã«ããã¯ã§åŒã³åºããšã console.log
ã§æ£åžžã«æ©èœããå¥ã®éåæé¢æ°ããããŸãã
ç·šéïŒå®éã«ã¯è¡ããšã®ãããã°ã«ãã£ãŠåé¡ãçºçããŠããããšãããããŸã
const archives = await fs.readdir(archiveDir);
ãã ãããã®åè«ã®åé¡ã¯ãã°èšé²ã«é¢ãããã®ã§ãã äŒè©±ãçãããããªãã
ããªãã¯ãŸã ãã°ãçµéšããŠãããããããŸããããã ïŒããªãã®æ£ç¢ºãªã³ãŒããç¥ããã«ïŒããªãã®ãã¹ããçµãã£ãåŸã«åœŒããæ絶ãããããããªãã®ã§ãããããåŸ ããã«ãã®ãããªããããã®çŽæããã©ãŒã¯ããããšã¯äžè¬çã«æªãèãã§ããããšãææãããã ãã§ãïŒ ïŒã
åæããŸããã forEach
ã§expect
åŒã³åºããå®è¡ãããã®ã¯ãåŠçããå¿
èŠã®ããå€æŽã®æ°ãäºåã«ããããªãããã§ãã
æ®å¿µãªããã Promise.all
ã¢ãããŒãã§ã¯äœãä¿®æ£ãããŸããã§ããã
forEach
map
ã䜿çšããŸãããïŒ éèŠãªã®ã¯ãäžé£ã®promiseãPromise.all
ã«è¿ãããšã§ãã
@SimenBã¯ããããã£ãŠããŸãã
ãšã©ãŒããããšèŠããŸããã
@tiborsaas Promise.all
ãå®äºããã®ãåŸ
ã£ãŠããŸããïŒ await Promise.all(...)
ã䜿çšããŠãã ãã
ãããåãçµæã§ããã :(
promise.all
ïŒ$ã®äžã«await new Promise((resolve) => setTimeout(resolve, 1000))
ãè¿œå ãããšã©ããªããŸããïŒ
è€è£œã§æ°ããåé¡ãéãããšãã§ããŸããïŒ OPã«ãã£ãŠå ±åãããåé¡ã¯ãå¥ã®åé¡ã衚瀺ãããŠããéã«ä¿®æ£ããããšæããŸãïŒéåæãæ£ããåŠçãããã©ããã«é¢ä¿ãªãããã°ã¹ããŒãã¡ã³ãã衚瀺ãããã¯ãã§ãïŒ
ããããã¯ç¢ºãã«å¥åŠã§ã
test('stuff', () => {
setTimeout(() => console.log('hi', 500));
})
éåžžã¯ãŸã äœããã®æ¹æ³ã§å°å·ãããŠããŸã
圌ã¯Promise.all([...], callback)
ã®2çªç®ã®åŒæ°ãšããŠã³ãŒã«ããã¯é¢æ°ã䜿çšããŠããŸãã 圌ã¯Promise.all([...]).then(callback)
ã䜿çšããå¿
èŠããããŸãã ããããããã§åœŒã®åé¡ã¯è§£æ±ºãããšæããŸããã .all
ã®2çªç®ã®åŒæ°ã¯ç¡èŠãããå®è¡ãããããšã¯ãããŸããïŒãããã£ãŠããã°ã¯å®è¡ãããŸããïŒã @tiborsaas
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
ãããããã¯ééã£ãŠããŸããããã°ã¹ããŒãã¡ã³ãã¯ãŸã 衚瀺ãããã¯ãã§ã
@SimenBãããã2çªç®ã®åŒæ°ã¯ç¡èŠãããŸãã
> Promise.all([Promise.resolve(true)], () => console.log("hi")).then(console.log, console.error);
Promise {
<pending>,
domain:
Domain {
domain: null,
_events: { error: [Function: debugDomainError] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
// output:
// [ true ]
ããããããšæ··åããŠããŸããŸãããããããªããã Thx @tobyhinloopen
const lol = await Promise.all(versions);
ã¯æåŸ
ã©ããã«æ©èœããŸããã
ãã®å Žåãé¢æ°ãåŒã³åºãããªãããã«ãã°ã¹ããŒãã¡ã³ãã倱ãããå¯èœæ§ããããŸãããããŒãã¯ããã»ã¹ãçµäºããåã«Promiseã®å®äºãåŸ
æ©ãããããå
ã®forEach
ã®å Žåã§ããã°ã¹ããŒãã¡ã³ãã衚瀺ãããŸãã ãããã£ãŠããŠãŒã¶ãŒãšã©ãŒã§ãã£ãŠããããã¯ãŸã ãã°ã§ã
PRïŒïŒ7731
https://www.npmjs.com/package/debugã䜿çšããŠãã®ã³ã°ãè¡ããŸãã ããã¯Jestã§æ©èœããŸããïŒ
ããããïŒ6524ãå®è¡ãããŸã§ã¯ãããŸããã
ãã¹ãã§debug
ãã¢ãã¯ãããã¹ããããå Žåã¯console.log
ã䜿çšããããšããå§ãããŸã
åèãŸã§ã«ãã³ã³ãœãŒã«ã¡ãã»ãŒãžã¯ããã¹ãã®å®äºåŸã«å°å·ããããšå€±ãããå¯èœæ§ããããŸããïŒ7731ã®äžéšã«ããã³ã¡ã³ããåç §ããŠãã ããã ãããäžéšã®çç±ã§ããå¯èœæ§ããããŸãããããã§å ±åãããŠããã³ã³ãœãŒã«ã¡ãã»ãŒãžã®æ¬ èœã®ãã¹ãŠã§ã¯ãªãå¯èœæ§ããããŸãã
--verboseã¯ç§ã®ããã«åããã --verboseã䜿çšããåã«ããã¹ãŠã§ã¯ãããŸãããäžéšã®ã¡ãã»ãŒãžã倱ãããŸããã ããŒãv10.15.3ãšjestv21.2.1ã䜿çšããŠããŸã
ããã§ãç§ã«ãšã£ãŠã¯åé¡ã§ãããã³ã³ãœãŒã«ãã°ãJestã«è¡šç€ºãããŸãã
åé¡ãæçµçã«è§£æ±ºããããšããããã°ã®ææ°ã®çºè¡šã«ãããããããåé¡ã¯ãŸã ååšããã³ã³ãœãŒã«ãã°ãåã³è¡šç€ºãããªãããšããããŸããç§ã¯jest v24.8.0
ã䜿çšããŠããŸãã
ãããŠãç§ã®äœåã¯ããŸããããŸãð€·ââïžã 調æ»å¯èœãªè€è£œãæçš¿ããŠãã ããã ç§ãã¡ã¯ãŠã£ã¶ãŒãã§ã¯ãããŸãããåºåã®ãã°ã«å€±æããŠããã³ãŒãã確èªããããšã¯ã§ããŸããã
å®éã調æ»åŸãAPIãã¹ãïŒã¹ãŒããŒãã¹ããªã©ïŒã«é¢é£ãããã°ã¯æ©èœããŸããã æåŸ ããã ïŒ/
@thymikeeããã¯äžè²«æ§ã®ãªãç¶æ
ã§çºçããŠãããããåçŸããã®ã¯éåžžã«å°é£ã§ãã äŸïŒ
ãã¹ãããåäžã®ãã¡ã€ã«ãéžæããŠæ¬¡ã®å®è¡ãå®è¡ããŸãïŒãªãã·ã§ã³pïŒã
åãæé ãè€è£œããããšããŸããããçµæã«äžè²«æ§ããããŸããã
JESTã®æ åœè ãããããããã°ã§ããããã«ãæ©èœããŠããªãå Žæã«ãµã³ãã«ãªããžããªãæäŸããŸãã @kresli
ãŠãŒã¶ãŒãšã©ãŒã®å¯èœæ§ããããããããŸãããã»ãšãã©ã®å Žåã await
ãæ¬ èœããŠãããã console.log
ãéåæã§ãã
ããã§ã¯ããããåçŸããæéãèŠã€ããŠã¿ãŸãã ãããŸã§ã¯ã以äžãããããããã«ãçµæã«ãã£ãŠãã°ãé£ã¹ãããŠããããšãããããŸããã FAILã衚瀺ãããåã«ãããã«ç§ã®2ã€ã®ãã°ã衚瀺ãããŸãã ãŸãã2ã€ã®ãã°ã®ã¿ãåé€ãããããšã«ãèšåãã䟡å€ããããŸãã äºãã«10åã®ãã°ãè¿œå ãããšã8åã衚瀺ãããŸãã ããã¯è¯ãã¹ã¿ãŒãã ãšæããŸã:)
ãããŸã§ã®éãããŸãæ©èœãããã£ãããªãŒã«ä¿®æ£ãå¿
èŠãªå Žåã¯ã winston
ã®ãããªãã®ã䜿çšããŠããã¡ã€ã«ãšã³ã³ãœãŒã«ã®äž¡æ¹ã«ãã°ãèšé²ã§ããŸãã ã³ã³ãœãŒã«ã¡ãã»ãŒãžã衚瀺ãããªãå Žåã§ãããã¡ã€ã«ã«æžã蟌ãŸããŸãã
winston
ã䜿çšãããšããã°ã«èšé²ããå Žæãæ§æã§ããè€æ°ã®ãã©ã³ã¹ããŒãããµããŒããããã©ã³ã¹ããŒããèªåã§å®è£
ã§ããŸãã
const logger = winston.createLogger({
level: "verbose",
format: winston.format.json(),
defaultMeta: {},
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: "combined.log" }),
],
});
logger.error(stuff)
ãã¶ãããŠã£ã³ã¹ãã³ã®ãã¬ãŒã«ã°ããŒãã«ã«console.*
ããªãŒããŒã©ã€ããããããªæ±ãããšãããããšããã§ããŸãã
@kresliããªãã®åè«ã¯ã©ã®ããŒãžã§ã³ã§ããïŒ ããã¯v23ã®åäœã®ããã«èŠããŸã
ããã¯jest v^24.6.0
ãšnode v10.14.2
ã§ç§ã«èµ·ããç¶ããŸãã ãªãã§ããïŒ
@yaelzããã¯ãäžè¬çã«ãŠãŒã¶ãŒãšã©ãŒã«ãã£ãŠåŒãèµ·ããããé åºãªåé¡ã§ããããã°ãåçŸããã®ãé£ãããšããæŽå²ããããŸãã
å¯çš¿è ããµã³ãã«ãªããžããªãæäŸããããšã§åçŸå¯èœãªã±ãŒã¹ãæäŸããããåé¡ãåçŸããå¥ã®æ¹æ³ãæäŸãããããããšã¯ãæ¬åœã«åœ¹ç«ã€ãšæããŸãã
çŽ æ©ã察å¿ã«æè¬èŽããŸãïŒ
çŸåšã®ã¬ãã¯ç§ã®çµç¹ã§ã¯éå
¬éã§ãããããããã¯é£ããã§ããã...ç§ãããã«å°éããå Žåã¯ãç¥ããããŸã:)
ããã¯
jest v^24.6.0
ãšnode v10.14.2
ã§ç§ã«èµ·ããç¶ããŸãã ãªãã§ããïŒ
æè¿ããããžã§ã¯ãã®ããã€ãã®äŸåé¢ä¿ãã¢ããã°ã¬ãŒãããŸããããåé¡ã¯ãããŸããã1ãæåã«ããã«çŽé¢ããŸããããæ°ããããŒãžã§ã³ã§è§£æ±ºããããšæããŸã...
解決ããããçŸåšäœ¿çšããŠããããŒãžã§ã³ãå ±æããŠããã ããŸããïŒ
2019幎8æ5æ¥æææ¥12:43PMNorman [email protected]
æžããŸããïŒ
çŽ æ©ã察å¿ã«æè¬èŽããŸãïŒ
çŸåšã®ã¬ãã¯ç§ã®çµç¹ã§ã¯éå ¬éã§ãããããããã¯é£ããã§ããã...
ããªãã¯ç§ãããã«å°éãããã©ããç¥ã£ãŠããŸã:)æè¿ããããžã§ã¯ãã®ããã€ãã®äŸåé¢ä¿ãã¢ããã°ã¬ãŒãããŸããããäœããããŸãã
åé¡ãç§ã¯1ãæåã«ããã«çŽé¢ããŸããããæ°ããããŒãžã§ã³ã§è§£æ±ºãããŸãã
ä¿¡ãã...â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/facebook/jest/issues/3853?email_source=notifications&email_token=AB6F4PAE3CHUMEBP7IYXRPLQC7Y2DA5CNFSM4DPZ3JSKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AB6F4PFXDSRHBW5CMTT2DKDQC7Y2DANCNFSM4DPZ3JSA
ã
解決ããããçŸåšäœ¿çšããŠããããŒãžã§ã³ãå ±æããŠããã ããŸããïŒ
ãã¡ããïŒ
åè«
^24.8.0
ããŒã-v
v10.16.0
ãããŠãããã¯ç§ãe2eãçµ±åããŠããããåãå ¥ãã®äž¡æ¹ãå®è¡ããããã«äœ¿çšããããã€ãã®npmã¹ã¯ãªããã§ãã
"scripts": {
"test": "NODE_ENV=test npm run test:unit && npm run test:integration:both",
"test:unit": "NODE_ENV=test jest --config test/jest.config.unit.js --detectOpenHandles",
"test:integration": "NODE_ENV=test MOCK=false jest --config test/jest.config.integration.js --runInBand --detectOpenHandles",
"test:integration:mock": "NODE_ENV=test MOCK=true jest --config test/jest.config.integration.js --runInBand --detectOpenHandles",
"test:integration:both": "NODE_ENV=test npm run test:integration:mock -- --coverage; npm run db:migration:test; npm run test:integration -- --coverage;",
"test:report": "open docs/test/report/index.html",
"test:report:coverage": "open docs/test/coverage/lcov-report/index.html"
}
ããã¯jest.configã§ãïŒ
"use strict";
module.exports = {
"bail": true,
"verbose": false,
"collectCoverage": false,
"expand": true,
"testURL": "http://localhost:3000/",
"coverageDirectory": "./docs/test/coverage",
"testEnvironment": "node",
"rootDir": "../",
"setupFilesAfterEnv": [
"./test/jest.setup.js"
],
"jest.showCoverageOnLoad": true,
"watchPathIgnorePatterns": ["node_modules"],
"transform": {
"^.+\\.js$": "babel-jest",
'^.+\\.tsx?$': 'ts-jest',
},
"reporters": [
"default",
["./node_modules/jest-html-reporter", {
"pageTitle": "...",
"outputPath": "./docs/test/report/index.html",
"includeFailureMsg": true,
"sort": "titleAsc",
"dateFormat": "yyyy-mm-dd HH:MM:ss"
}]
]
};
ããã圹ã«ç«ãŠã°å¹žãã
ããã§ã¯ããããåçŸããæéãèŠã€ããŠã¿ãŸãã ãããŸã§ã¯ã以äžãããããããã«ãçµæã«ãã£ãŠãã°ãé£ã¹ãããŠããããšãããããŸããã FAILã衚瀺ãããåã«ãããã«ç§ã®2ã€ã®ãã°ã衚瀺ãããŸãã ãŸãã2ã€ã®ãã°ã®ã¿ãåé€ãããããšã«ãèšåãã䟡å€ããããŸãã äºãã«10åã®ãã°ãè¿œå ãããšã8åã衚瀺ãããŸãã ããã¯è¯ãã¹ã¿ãŒãã ãšæããŸã:)
@kresliããã«ããã¹ããŒã¿ã¹ããŒãšæéåºåã¯äœã§ããïŒ ãã¹ãã¹ã€ãŒããå®è¡ãããšã_RUN HARNESS test-harness / index.js_ã衚瀺ããããã¹ãŠãå®è¡ããããŸã§äœã衚瀺ãããŸããã 次ã«ãæåŸã«console.logã¡ãã»ãŒãžã衚瀺ããã_RUNHARNESS..._ã®è¡ã_ã«å€ãããŸãã
æŽæ°ïŒç¡èŠããŠãã ãããç§ã®ã³ãŒãã®åé¡ã§ããããšãå€æããŸãã
MacOSã®ããŒãv12.16.1ãjest 25.5.4ãtypescript3.8.3ã§ãŸã ããã«çŽé¢ããŠããŸãã --runInBandã®äœ¿çšãåé·æ§ã®ç¡å¹å/æå¹åã-silent = trueã®äœ¿çšã®æšå¥šäºé ãè©ŠããŸãããã圹ã«ç«ã¡ãŸããã§ããã
æãåèã«ãªãã³ã¡ã³ã
2幎éã³ã³ãœãŒã«ãã°ããªãã£ãã®ã§ãç§ã¯ããåªããéçºè ã«ãªããŸããã ããŒã ãžã§ã¹ãã«æè¬ããŸãïŒ