成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:2日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人一级视频在线观看| 国产欧美精品在线观看| 国产精品欧美精品| 激情六月婷婷久久| 久久人人九九| 亚洲国产美国国产综合一区二区| 亚洲电影自拍| 2欧美一区二区三区在线观看视频| 国产传媒欧美日韩成人| 欧美日韩电影一区| 日韩高清电影一区| 欧美在线综合| 日韩中文字幕1| 在线观看www91| 久久成人免费网| 欧美日韩国产一级| 国产一区二区福利视频| 日韩一区和二区| 高清久久久久久| 日韩视频在线永久播放| 国产精品一区在线| 欧美成人精品二区三区99精品| 粉嫩一区二区三区性色av| 日韩亚洲欧美在线| 成人免费视频视频在线观看免费| 精品国免费一区二区三区| 91在线视频播放地址| 中文字幕精品一区 | 在线免费观看欧美| 亚洲日本中文字幕区| 亚洲精品美女91| 亚洲成人自拍一区| 久久精品在线| 九九久久精品视频| 制服丝袜av成人在线看| 99视频精品全部免费在线| 国产精品无人区| 欧美色图麻豆| 国产精品对白交换视频 | 精品国产乱码久久久久久图片| 99久久精品免费看国产免费软件| 国产区在线观看成人精品| 国语自产精品视频在线看抢先版结局 | 伦理电影国产精品| 欧美一区二区三区日韩| 99免费精品视频| 亚洲特黄一级片| 亚洲一区二区在线看| 毛片不卡一区二区| 日韩视频一区二区三区| 女女同性女同一区二区三区91| 国产精品视频看| 国产日韩欧美二区| 美女网站在线免费欧美精品| 欧美精品三级在线观看| 懂色av一区二区在线播放| 国产欧美日韩在线| 国产欧美日韩一级| 久草在线在线精品观看| 久久久久久久精| 一本综合久久| 狠狠色狠狠色综合| 国产三级欧美三级日产三级99| 亚洲东热激情| 美女mm1313爽爽久久久蜜臀| 精品国精品自拍自在线| 亚洲精品欧美| 精品一二三四在线| 国产精品美女久久久久久久久久久 | 91精品国产综合久久福利 | 国产精品99久久久久久久女警| 久久精品在这里| 国产农村妇女精品一二区 | 午夜激情一区二区| 日韩欧美电影一区| 99国产精品久久久久久久成人热| 琪琪久久久久日韩精品| 精品嫩草影院久久| 在线午夜精品| 国产成人亚洲综合a∨婷婷| 国产日韩亚洲欧美综合| 久久一区二区精品| 99国产精品视频免费观看| 一区二区三区小说| 91精选在线观看| 亚洲国产第一| 韩日精品视频一区| 亚洲天堂精品在线观看| 欧美午夜片在线看| 亚洲视频一二| 激情图片小说一区| 综合激情网...| 91精品国产美女浴室洗澡无遮挡| 在线观看欧美一区| 高清日韩电视剧大全免费| 亚洲精品成人在线| 欧美一区二区三区在线观看| 一本久道久久综合狠狠爱| 国产精品一区二区三区99| 国产精品福利一区| 欧美一区二区三区视频在线观看 | 2023国产精品| 午夜国产欧美理论在线播放| 美女精品自拍一二三四| 国产精品天美传媒沈樵| 欧美性淫爽ww久久久久无| 在线日韩av永久免费观看| 国产精品综合视频| 亚洲第一成年网| 国产精品久久久久永久免费观看 | 天天av天天翘天天综合网色鬼国产| 久久毛片高清国产| 欧美日韩亚洲综合一区二区三区| 红桃视频国产一区| 成人免费看片app下载| 日韩精品久久理论片| 国产精品狼人久久影院观看方式| 欧美日韩免费视频| 国产区二精品视| 91蜜桃视频在线| 国产精品66部| 亚洲国产欧美在线| 国产精品色婷婷久久58| 日韩一二三四区| 欧美性一级生活| 性欧美长视频| 欧美先锋影音| 高清久久久久久| 久久99蜜桃精品| 亚洲6080在线| 亚洲美女区一区| 欧美经典三级视频一区二区三区| 日韩一级片在线播放| 91成人免费在线视频| 亚洲毛片视频| 欧美精品七区| 国产成人自拍在线| 麻豆国产一区二区| 亚洲福利视频导航| 中文字幕视频一区| 国产三级三级三级精品8ⅰ区| 日韩一级免费一区| 欧美高清视频不卡网| 亚洲综合电影一区二区三区| 国产在线精品二区| 91在线porny国产在线看| 国产美女久久久久| 免播放器亚洲一区| 日韩av一级片| 三级欧美在线一区| 亚洲午夜激情网页| ...av二区三区久久精品| 国产精品午夜在线| 国产欧美精品国产国产专区| 欧美tk丨vk视频| 日韩欧美成人激情| 777午夜精品免费视频| 欧美日韩国产一级片| 91搞黄在线观看| 色综合激情久久| 老鸭窝毛片一区二区三区| 国产精品视频久久一区| 中日韩在线视频| 一本久道久久综合狠狠爱| 亚洲日本激情| 亚洲精品国产日韩| 精品91在线| 亚洲激情黄色| 国产区日韩欧美| 午夜亚洲影视| 久久综合中文色婷婷| 91久久人澡人人添人人爽欧美| 色婷婷综合激情| 色综合久久66| 91九色02白丝porn| 欧美视频一区在线观看| 欧美日韩免费不卡视频一区二区三区| 欧美亚洲一区三区| 制服丝袜亚洲色图| 337p日本欧洲亚洲大胆色噜噜| 久久久久久久综合日本| 国产视频一区二区在线| 中日韩av电影| 亚洲天堂久久久久久久| 亚洲免费观看视频| 亚洲国产欧美日韩另类综合| 亚洲成av人片观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 在线观看一区二区精品视频| 欧美日韩dvd在线观看| 日韩免费一区二区| 国产亚洲精久久久久久| 欧美激情一区二区三区蜜桃视频 | 亚洲精品日韩综合观看成人91| 一区二区久久久久久| 天天操天天干天天综合网| 久久成人羞羞网站| 国产成人av网站| 99久久伊人精品| 欧美激情国产日韩|