Vue: ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ : ์„ฑ๋Šฅ์ด ์ •์˜๋˜์ง€ ์•Š์Œ-v2.6.9 ์‚ฌ์šฉ

์— ๋งŒ๋“  2019๋…„ 03์›” 14์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

๋ฒ„์ „

2.6.8

๋ณต์ œ ๋งํฌ

https://jsfiddle.net/chrisvfritz/50wL7mdz/

์žฌํ˜„ ๋‹จ๊ณ„

ํ˜„์žฌ ๋ถ„๋ฆฌํ•˜๋ ค๊ณ  ์‹œ๋„์ค‘์ธ ์ตœ์‹  ๋ฒ„์ „์˜ vue / dist / vue.js ํŒŒ์ผ์—์„œ ๋˜์ง€๊ณ  ์žˆ์ง€๋งŒ ์ตœ๊ทผ์— ์ถ”๊ฐ€ ๋œ ์ƒˆ ์ฝ”๋“œ์™€ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ด€์ฐฐํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋” ๋งŽ์€ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
1)์ด ์ €์žฅ์†Œ๋กœ ๋ณต์ œ-https://github.com/vuejs/vue-test-utils-mocha-webpack-example
2) ๋ณต์ œ
3) npm i
4) npm ํ…Œ์ŠคํŠธ-์˜ค๋ฅ˜ ์—†์Œ
4) npm ์—…๋ฐ์ดํŠธ vue
5) npm ํ…Œ์ŠคํŠธ-ReferenceError : ์„ฑ๋Šฅ์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ธ์‚ฌ๋ง,
ํ”Œ ๋ผ๋ฉ˜

๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๊นŒ?

๊ด€์ฐฐ ๋œ ์˜ค๋ฅ˜ ์—†์Œ

์‹ค์ œ๋กœ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ค๋ฅ˜๊ฐ€ ๊ด€์ฐฐ ๋จ

bug has PR has workaround improvement

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

jsdom ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

> window.performance
Performance {}
> performance
ReferenceError: performance is not defined

๋”ฐ๋ผ์„œ jsdom์—์„œ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด performance ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  window.performace ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ  ํ•  ๋•Œ ์žฌํ˜„์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค

์•ˆ๋…•ํ•˜์„ธ์š” @posva ,
์ด ๋ฌธ์ œ๋Š” ์˜จ๋ผ์ธ ํŽธ์ง‘๊ธฐ๋กœ ๋ณต์ œ๋˜์ง€ ์•Š์ง€๋งŒ ์žฌํ˜„ ๋‹จ๊ณ„ ์„น์…˜์—์„œ github์˜ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
์ธ์‚ฌ๋ง,
ํ”Œ ๋ผ๋ฉ˜

๋‹น์‹ ์ด ์—ฐ๊ฒฐ ํ•œ ๊ฒƒ์€ ์•„์นด์ด๋ธŒ๋˜๊ณ  ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์žฌํ˜„์€ jsfiddle ์ผ ํ•„์š”๋Š” ์—†์œผ๋ฉฐ HTML ํŒŒ์ผ (๋˜๋Š” ๊ทธ ๋‚ด์šฉ ๋งŒ) ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ mocha ๋˜๋Š” vue-test-utils์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ข…์†์„ฑ์„ ํฌํ•จํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค (ํ•ด๋‹น ํŒจํ‚ค์ง€์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ). ๊ฑด๋ฐฐ.

๋‹ต์žฅ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
ํ -๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ค„์—์žˆ๋Š” '์„ฑ๋Šฅ'์€ ํŒŒ์ผ ์–ด๋””์—๋„ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. window.performance์™€ config.performance๊ฐ€ ์žˆ์ง€๋งŒ ๊ธ€๋กœ๋ฒŒ '์„ฑ๋Šฅ'์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์— ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์— ๋Œ€ํ•œ ์ •์  ๋ถ„์„์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ธ์‚ฌ๋ง,
ํ”Œ ๋ผ๋ฉ˜

๋˜ํ•œ ์ด๊ฒƒ์„ ์–ป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Vue๊ฐ€ 2.6.9๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๋œ ํ›„ CI๋กœ๋ถ€ํ„ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค (์ €๋Š” Renovate๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ deps๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค).

jsdom ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

> window.performance
Performance {}
> performance
ReferenceError: performance is not defined

๋”ฐ๋ผ์„œ jsdom์—์„œ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด performance ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  window.performace ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ๋ผ๋ฒจ ๊ฐœ์„ ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ๋ฉ”๋‰ด๋ฅผ ์—ด๊ณ  has PR ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ ํ•œ ํ›„ ๋ฐ”๊นฅ ์ชฝ์„ ํด๋ฆญํ•˜์—ฌ ์ œ๊ฑฐํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์žฌ๋ฏธ์žˆ๋Š” ๊ฐ€์žฅ์ž๋ฆฌ ์ผ€์ด์Šค

JSDOM๊ฐ€์žˆ๋‹คํ•˜์ง€๋งŒ ์ฃผ๋ชฉํ•ด์•ผํ•œ๋‹ค performance ๋ฅผ ํ†ตํ•ด ์ง€์› process.hrtime , ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ํ˜„์žฌ์˜ ํ•ดํ‚น์„ ๋ณด์žฅ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค performance (ํ•ญ์ƒ ์ž‘์—… JSDOM ํ™˜๊ฒฝ์—์„œ ์˜ˆ์ƒ๋˜๋ฏ€๋กœ๋ฅผ ๊ฒฐ๊ตญ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ตฌํ˜„๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค).

@posva ๐Ÿ˜‚

์ด๊ฒƒ์ด ๋ฆด๋ฆฌ์Šค ๋  ๋•Œ๊นŒ์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ JSDOM ๋“ฑ๋ก ํ›„์— ๋‹ค์Œ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

// eslint-disable-next-line no-undef
global.performance = window.performance;

์ด๊ฒƒ์ด ๋ฆด๋ฆฌ์Šค ๋  ๋•Œ๊นŒ์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ JSDOM ๋“ฑ๋ก ํ›„์— ๋‹ค์Œ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

// eslint-disable-next-line no-undef
global.performance = window.performance;

๋ฉ์ฒญํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ JSDOM ๋“ฑ๋ก์ด Vue CLI 3 ๋ฐ cli-plugin-unit-mocha (setup.js ์—†์Œ)์—์„œ ์ถ”์ƒํ™”๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ ์ค„์„ ์–ด๋””์— ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

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

// eslint-disable-next-line no-undef 
global.performance = window.performance;

๊ฐ™์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค„์„ ์–ด๋””์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ?

@theonlychase ๋‚ด ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ์ง„์ž… ์  test/setup.js ํ–ˆ์Šต๋‹ˆ๋‹ค. require('jsdom-global')

--require ํ”Œ๋ž˜๊ทธ์—์„œ ์•„๋ž˜ ์ฐธ์กฐ.

"test": "mocha-webpack --webpack-config webpack/webpack.config.test.js --require test/setup.js reporter mocha-bamboo-reporter"
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰