成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于vue-cli的單元測(cè)試案例

CoXie / 2627人閱讀

摘要:的單元測(cè)試最近項(xiàng)目開(kāi)發(fā)臨近結(jié)尾,反思之前做的不足的地方,想著應(yīng)該引入測(cè)試類的做法,于是乎開(kāi)始學(xué)習(xí)前端測(cè)試之類的文檔。本次主要提供可使用,可運(yùn)行的單元測(cè)試代碼,不足之處,歡迎指出。

vue-cli的單元測(cè)試

最近項(xiàng)目開(kāi)發(fā)臨近結(jié)尾,反思之前做的不足的地方,想著應(yīng)該引入測(cè)試類的做法,于是乎開(kāi)始學(xué)習(xí)前端測(cè)試之類的文檔。因?yàn)轫?xiàng)目是基于vue-cli的單頁(yè)面,所以想著在此基礎(chǔ)上拓展。

測(cè)試框架類型

vue官方提供了幾種測(cè)試框架 jest,mocha 等這幾種測(cè)試框架,本次案例采用的是 karma + mocha + chai 這個(gè)配套來(lái)實(shí)現(xiàn)的。而且還是結(jié)合了 vue-test-utils 這個(gè)官方的測(cè)試庫(kù)。特別說(shuō)明,在安裝vue-cli時(shí)在選擇測(cè)試類型時(shí),通過(guò) 上下鍵 來(lái)選擇對(duì)應(yīng)的測(cè)試框架

具體案例說(shuō)明

靜態(tài)文件加載測(cè)試

import Vue from "vue"
import Test from "@/components/Test"
import {mount} from "vue-test-utils"

describe("Test.vue",()=>{
    it("頁(yè)面加載成功",()=>{
        const wrapper = mount(Test);
        expect(wrapper.find("h1").text()).to.equal("My First UnitTest");
    })
})

首頁(yè)引入要測(cè)試的文件以及vue-test-utils提供的方法mount,通過(guò)這個(gè)方法掛載頁(yè)面,可以輕松獲取頁(yè)面的Dom元素。describe以及it就是mocha的語(yǔ)法,兩者分別接受兩個(gè)參數(shù)。前者是要測(cè)試的頁(yè)面,后者是測(cè)試時(shí)的提示語(yǔ),然后都接受一個(gè)函數(shù),在it里面的函數(shù)則是要斷言出你要的結(jié)果,即expect()的內(nèi)容是否等于你想要的結(jié)果。

事件操作測(cè)試

import Vue from "vue"
import Event from "@/components/Event"
import { mount } from "vue-test-utils"

describe("Event.vue",()=>{
    it("事件方法測(cè)試",()=>{
        const wrapper = mount(Event);
        const clickButton = wrapper.find("button");
        clickButton.trigger("click");
        const number = Number(wrapper.find("input").element.value);
        expect(number).to.equal(2);
    })
})

整體格式差不多,主要是就是用到vue-test-utils的trigger方法模擬點(diǎn)擊操作

異步操作測(cè)試

import Vue from "vue"
import {mount,shallow} from "vue-test-utils"
import AsyncEvent from "@/components/AsyncEvent"

describe("AsyncEvent.vue",()=>{
    it("異步行為測(cè)試",(done)=>{
        const wrapper = mount(AsyncEvent);
        wrapper.find("button").trigger("click");
        setTimeout(()=> {
            expect( Number(wrapper.find("span").text()) ).to.equal(2);
            done();
        }, 1000)
    })
})

這里使用setTimeout來(lái)做異步測(cè)試,注意的是這里要使用 done 這個(gè)方法來(lái)確定什么時(shí)候執(zhí)行測(cè)試結(jié)束

VUEX測(cè)試

import { shallow, createLocalVue } from "vue-test-utils"
import Vuex from "vuex"
import VuexTest from "@/components/VuexTest"
import myModule from "@/store/index"

const localVue = createLocalVue();
localVue.use(Vuex);

describe("VuexTest.vue",()=>{
    let getters = myModule.getters;
    let state;
    let store;
    let mutations;

    beforeEach(()=>{
        state = {
            count: 0
        }
        mutations = {
            increment(state) {
                state.count++;
            }
        }
        store = new Vuex.Store({
              modules: {
                state,
                mutations,
                getters,                
              }
        })
    })

    it("Vuex 渲染監(jiān)測(cè)",()=>{
        const wrapper = shallow(VuexTest,{store,localVue});
        const span = wrapper.find("span");
        expect( Number(span.text()) ).to.equal(state.count)
    })

    it("Vuex 事件監(jiān)測(cè)",()=>{
           mutations.increment(state)
          expect(state.count).to.equal(1);
    })
})

在使用vue時(shí)當(dāng)然也要考慮vuex的測(cè)試,這是使用createLocalVue方法構(gòu)造一個(gè)局部獨(dú)立作用于的vue環(huán)境,避免影響到全局的Vue環(huán)境,而 shallow 創(chuàng)建一個(gè)包含被掛載和渲染的 Vue 組件的 Wrapper,不同的是被存根的是子組件,基本和 mount 差不多,但是官方demo 使用的是shallowmount,但是實(shí)際測(cè)試中就是報(bào)錯(cuò),然后換成了shallow。接著測(cè)試?yán)锩嬉惨獦?gòu)建一個(gè) vuex 的store倉(cāng)庫(kù),這里還引入了項(xiàng)目里面的store,并將其getters賦值給測(cè)試?yán)锏膅etters,這樣就可以確保斷言的結(jié)果是我們項(xiàng)目中設(shè)定的。

結(jié)語(yǔ)說(shuō)明

畢竟第一次寫(xiě)單元測(cè)試,了解的東西并不深入,具體感興趣的同學(xué)可以好好看看上述的測(cè)試框架及文檔,這幾個(gè)庫(kù)的api可謂豐富。本次主要提供可使用,可運(yùn)行的單元測(cè)試代碼,不足之處,歡迎指出。后續(xù)會(huì)更新其他的測(cè)試場(chǎng)景。
git代碼地址 https://github.com/1533266567...

參考文章

https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/110143.html

相關(guān)文章

  • 搭建自己前端自動(dòng)化測(cè)試腳手架(一)

    摘要:還可以自動(dòng)完成單元測(cè)試的配置,工具選型為準(zhǔn)備出發(fā)有了以上的初步了解,我們就可以準(zhǔn)備著手搭建我們自己的測(cè)試環(huán)境了,讓我們短暫休息一下,下一章見(jiàn)下一篇搭建自己的前端自動(dòng)化測(cè)試腳手架二 搭建自己的前端自動(dòng)化測(cè)試腳手架(一) LancerComet at 17:55, 2016.07.17.歡迎轉(zhuǎn)載,轉(zhuǎn)載時(shí)還請(qǐng)保留作者署名。 隨著前端項(xiàng)目規(guī)模的日益膨脹,自動(dòng)化測(cè)試越來(lái)越受到廣大前端與測(cè)試朋友關(guān)...

    luffyZh 評(píng)論0 收藏0
  • 基于 Node+express 爬蟲(chóng)數(shù)據(jù) API,爬一套自己api數(shù)據(jù)(2)

    摘要:目前半島局勢(shì)緊張,朝鮮已進(jìn)行了六次核試驗(yàn),被廣泛認(rèn)為已經(jīng)擁有了核彈頭。另外朝鮮的導(dǎo)彈技術(shù)今年以來(lái)快速突破,成功試射了射程可覆蓋美國(guó)本土的洲際彈道導(dǎo)彈。這個(gè)版的內(nèi)容傳到互聯(lián)網(wǎng)上后,迅速刷屏,引起紛紛議論。 SplderApi2 Node-SplderApi2 第二版 基于Node 的網(wǎng)絡(luò)爬蟲(chóng) API接口 包括前端開(kāi)發(fā)日?qǐng)?bào)、kugou音樂(lè)、前端top框架排行、妹紙福利、搞笑視頻、段子笑話、...

    beanlam 評(píng)論0 收藏0
  • vue-cli “從入門(mén)到放棄”

    摘要:主要作用目錄結(jié)構(gòu)本地調(diào)試代碼部署熱加載單元測(cè)試在如今前端技術(shù)飛速發(fā)展的時(shí)代,和作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。 主要作用:目錄結(jié)構(gòu)、本地調(diào)試、代碼部署、熱加載、單元測(cè)試 在如今前端技術(shù)飛速發(fā)展的時(shí)代,angular.js、vue.js 和 react.js 作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。作為國(guó)人若你不知道 vue,小生表示可以理解,如果作為中國(guó)的前端猿不知道 vue,...

    DrizzleX 評(píng)論0 收藏0
  • vue-cli “從入門(mén)到放棄”

    摘要:主要作用目錄結(jié)構(gòu)本地調(diào)試代碼部署熱加載單元測(cè)試在如今前端技術(shù)飛速發(fā)展的時(shí)代,和作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。 主要作用:目錄結(jié)構(gòu)、本地調(diào)試、代碼部署、熱加載、單元測(cè)試 在如今前端技術(shù)飛速發(fā)展的時(shí)代,angular.js、vue.js 和 react.js 作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。作為國(guó)人若你不知道 vue,小生表示可以理解,如果作為中國(guó)的前端猿不知道 vue,...

    william 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

CoXie

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<