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 : ์ฑ๋ฅ์ด ์ ์๋์ง ์์์ต๋๋ค.
์ธ์ฌ๋ง,
ํ ๋ผ๋ฉ
๊ด์ฐฐ ๋ ์ค๋ฅ ์์
์ค๋ฅ๊ฐ ๊ด์ฐฐ ๋จ
๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ ๋ ์ฌํ์ ์ ๊ณตํ์ญ์์ค
์๋
ํ์ธ์ @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"
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
jsdom ํ๊ฒฝ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค.
๋ฐ๋ผ์ jsdom์์ ์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์คํํ๋ ค๋ฉด
performance
์ง์ ํธ์ถํ๋ ๋์window.performace
๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.