日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解關于Vue單元測試的幾個坑

瀏覽:31日期:2023-01-24 15:56:28

一、寫在前面

這篇文章的代碼使用karma,mocha,chai,sinon-chai配合Vue的實例屬性進行單元測試

二、全局的組件的坑

由于我的g-icon是全局注冊的,所以使用g-input組件時的時候g-icon是直接用的,所以測試時有關icon的代碼永遠是錯的。

把g-icon局部注冊的組件

三、在測試中觸發點擊事件

模擬我在app.vue里使用g-input組件

<g-input v-model='message'></g-input>

使用new event 和 dispatch 模擬事件在組件上觸發,雖然這個事件和我們實際的事件不一樣,但名字一樣就夠了,測試回調函數自帶的參數

it('支持事件', () => { ['change', 'input', 'focus', 'blur'].forEach(eventName => { vm = new Constructor({}).$mount(); const callback = sinon.fake(); vm.$on(eventName, callback); let event = new Event(eventName); Object.defineProperty(event, 'target', { value: { value: 'hi' }, enumerable: true }); let inputElement = vm.$el.querySelector('input'); inputElement.dispatchEvent(event); expect(callback).to.have.been.calledWith('hi'); }); });

測試這個組件事件觸發時,回調的參數,由于自定義事件沒有target,我們需要自己寫上去

value: { value: 'hi' }第一個value是defineProperty的

四、Vue的版本

坑來自于下面一段代碼

it('接受gutter', function(done) { Vue.component('g-row', Row); Vue.component('g-col', Col); const div = document.createElement('div'); document.body.appendChild(div); div.innerHTML = ` <g-row gutter='20'> <g-col></g-col> <g-col></g-col> </g-row>`; const vm = new Vue({ el: div }); setTimeout(() => { const row = vm.$el.querySelector('.row'); expect(getComputedStyle(row).marginRight).to.eq('-10px'); expect(getComputedStyle(row).marginLeft).to.eq('-10px'); const cols = vm.$el.querySelectorAll('.col'); expect(getComputedStyle(cols[0]).paddingRight).to.eq('10px'); expect(getComputedStyle(cols[1]).paddingLeft).to.eq('10px'); done(); vm.$el.remove(); vm.$destroy(); }, 0); });

我使用直接在el上寫入template代碼,所以我默認的import Vue from 'vue'(runtimeonly版本)無法編譯這個代碼,import Vue from '../node_modules/vue/dist/vue.esm.js'使用上面引入即可

在沒有template選項是,el不替換

五、異步測試

還是這個代碼,先看以下測試兩個組件關系

it('接受gutter', function(done) { Vue.component('g-row', Row); Vue.component('g-col', Col); const div = document.createElement('div'); document.body.appendChild(div); div.innerHTML = ` <g-row gutter='20'> <g-col></g-col> <g-col></g-col> </g-row>`; const vm = new Vue({ el: div }); setTimeout(() => { const row = vm.$el.querySelector('.row'); expect(getComputedStyle(row).marginRight).to.eq('-10px'); expect(getComputedStyle(row).marginLeft).to.eq('-10px'); const cols = vm.$el.querySelectorAll('.col'); expect(getComputedStyle(cols[0]).paddingRight).to.eq('10px'); expect(getComputedStyle(cols[1]).paddingLeft).to.eq('10px'); done(); vm.$el.remove(); vm.$destroy(); }, 0); });

先說為什么需要seTimeout

從created和mounted鉤子說起,createElement和appendChild在js代碼是同步的,兩個鉤子分別在這兩段代碼后執行,鉤子異步執行的。

由于我們在g-row組件中有mounted鉤子,所以我們必須得進行異步檢測,否則我們在new Vue之后立馬進行測試,鉤子還沒執行完。

mocha異步測試

mocha默認不執行異步,加入done參數,調用done()就可以

六、垃圾回收

每一個測試完成之后,都要寫下面兩條代碼

vm.$el.remove(); vm.$destroy();

有兩個作用:

銷毀在頁面中的數據 銷毀在內存的數據

雖然js是單線程,但是還有一個dom線程

var div = document. getElementById(’xxx’)div.onclick = function() { ///code}setTimeout(function(){ div. remove()}, 3000)

現在我們討論,什么時候div上的函數被回收

函數被全局變量div上的onlick引用了

div.remove()只是在頁面刪掉了,沒有被內存刪掉

var div = document. getElementById(’xxx’)div.onclick = function() { ///code}setTimeout(function(){ div = mull}, 3000)

這個函數并沒有被刪除,函數是寫在dom上的,div變量只是引用了dom對象

var div = document. getElementById(’xxx’)div.onclick = function() { ///code}setTimeout(function(){ var div2 = document. getElementById(’xxx’)}, 3000)

div= null和div.remove同時做就可以了,分別從內存和dom上刪除了

ie有bug,即使這樣都刪不了,div.onlick = null 可以

到此這篇關于關于Vue單元測試的幾個坑的文章就介紹到這了,更多相關 Vue單元測試 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜臀av亚洲一区中文字幕| 色爱综合网欧美| 久久精品国产99国产精品| 精品久久久网| 欧美1区2区3| 人人草在线视频| 黄色亚洲大片免费在线观看| 蘑菇福利视频一区播放| 亚洲一区不卡| 日本成人中文字幕| 精品国产亚洲日本| 91精品国产乱码久久久久久久| 国产精选一区| 国产精品777777在线播放 | 黑人精品一区| 亚洲免费影视| 99成人在线| 久久亚洲黄色| 日韩专区一卡二卡| 电影91久久久| 综合色就爱涩涩涩综合婷婷| 超级白嫩亚洲国产第一| 婷婷精品久久久久久久久久不卡| 国产一区二区久久久久| 久久精品99国产精品日本| 免费在线亚洲欧美| 亚洲精品黄色| 久久久久午夜电影| 免费污视频在线一区| 视频一区二区三区中文字幕| 国产a亚洲精品| 欧美三级第一页| 伊人影院久久| 天堂8中文在线最新版在线| 久久毛片亚洲| 不卡专区在线| 欧美激情99| 国产乱人伦丫前精品视频| 亚洲精品1区| 亚洲人成亚洲精品| 99精品在线| 精品欧美一区二区三区在线观看| 久久精品国产福利| 日韩av一区二区在线影视| 激情欧美一区| 国产精品成人3p一区二区三区| 国产视频久久| 欧美精品激情| 91免费精品国偷自产在线在线| 国产第一亚洲| 少妇精品久久久一区二区三区| 蜜桃视频在线观看一区| 免费精品视频| 亚洲欧美伊人| 香蕉久久99| 国产一区三区在线播放| 国产精品成人自拍| 久久精品色播| 麻豆精品91| 欧美国产极品| 欧美成人亚洲| 国产精品sss在线观看av| 日韩成人亚洲| 亚洲另类视频| 国产一级久久| 天堂8中文在线最新版在线| 在线观看亚洲精品福利片| 98精品视频| 欧美日韩中出| 国产农村妇女精品一二区 | 黑人精品一区| 欧美日韩一区二区三区四区在线观看 | 国内精品99| 国产精品密蕾丝视频下载| 久久精品1区| 麻豆精品视频在线观看视频| 久久久久久免费视频| 麻豆视频久久| 欧美日韩一区自拍| 精品淫伦v久久水蜜桃| 蜜臀av性久久久久蜜臀aⅴ流畅| 免费高潮视频95在线观看网站| 国产欧美日韩一级| 亚洲免费毛片| 91久久国产| 欧美日韩在线播放视频| 国产传媒在线| av资源亚洲| 欧美激情国产在线| 国产激情久久| 日本成人中文字幕在线视频| 亚洲精品乱码日韩| 亚洲一区二区三区四区电影| 亚洲欧美日韩国产综合精品二区| 成人啊v在线| 欧美aa在线观看| 激情视频网站在线播放色| 狂野欧美性猛交xxxx| 国产欧美一级| 综合欧美亚洲| 久久久成人网| 久久久水蜜桃av免费网站| 最近高清中文在线字幕在线观看1| 精品一区二区三区视频在线播放 | 日本久久黄色| 国产va免费精品观看精品视频| 国产高清日韩| 欧美欧美黄在线二区| 日韩一区二区三免费高清在线观看| 欧美专区18| 国产亚洲一级| 日本久久二区| 麻豆免费精品视频| 91成人精品视频| 丝瓜av网站精品一区二区| 在线一区视频| 国产精品欧美大片| 亚洲福利免费| 欧美日韩1区| 深夜视频一区二区| 黄色av日韩| 国产欧美二区| 国产精品av久久久久久麻豆网| 日本在线视频一区二区| 日韩不卡一区二区三区| 欧美日韩四区| 色婷婷综合网| 人人爱人人干婷婷丁香亚洲| 久久免费黄色| 亚洲精品美女91| 九一成人免费视频| 美女国产一区二区三区| 亚洲一区欧美| 亚洲手机视频| 国产精品美女午夜爽爽| 丝袜国产日韩另类美女| 精品一区二区三区中文字幕| 日韩国产在线观看一区| 99精品综合| 成人免费网站www网站高清| 美女高潮久久久| 国产毛片精品| 免费在线观看成人| 欧美日韩国产免费观看 | 亚洲国内欧美| 日韩在线网址| 蜜桃久久精品一区二区| 精品亚洲自拍| 国产免费av一区二区三区| 99国内精品| 99视频+国产日韩欧美| 国产99精品| 日韩久久视频| 国产精品国产一区| 成人在线视频区| 国产白浆在线免费观看| 亚洲国产福利| 久久美女性网| 激情五月综合| 喷白浆一区二区| 日韩国产精品久久久久久亚洲| 亚洲免费专区| 日韩国产在线一| 国产日韩欧美三级| 成人在线黄色| 婷婷综合网站| 亚洲1区在线| 精品久久免费| 欧美精选一区二区三区| 每日更新成人在线视频| 深夜福利一区| 欧美日韩1区| 亚洲最新av| 国产精品久久国产愉拍| caoporn视频在线| 国产亚洲一区在线| 国产欧美日韩综合一区在线播放| 国产日韩欧美高清免费| 国产一区2区| 中文字幕av一区二区三区人 | 日本不卡一二三区黄网| 国产精品v亚洲精品v日韩精品| 深夜福利视频一区二区| 夜夜嗨一区二区| 牛牛精品成人免费视频| 日本不良网站在线观看| 亚洲一区二区三区久久久| 精品黄色一级片| 婷婷精品在线| 美女一区网站| 7777精品| 久久成人国产| 欧美www视频在线观看| 亚洲精品欧洲| 在线精品视频在线观看高清| 国产精品黄色| 亚洲精品日韩久久| 日本一二区不卡| 99国产精品99久久久久久粉嫩| 国产精品**亚洲精品|