摘要:官方推薦使用來(lái)進(jìn)行單元測(cè)試。導(dǎo)入和組件,進(jìn)行測(cè)試檢查原始組件選項(xiàng)組件有對(duì)于組件需要,編寫單元測(cè)試時(shí),通過(guò)傳遞該參數(shù)。在狀態(tài)更新后檢查生成的在狀態(tài)改變后和斷言更新前等待一刻執(zhí)行命令運(yùn)行單元測(cè)試。參考單元測(cè)試測(cè)試框架實(shí)例教程
本文基于vue-webpack-boilerplate。官方推薦使用Karma+Mocha+Chai來(lái)進(jìn)行單元測(cè)試。
介紹Karma:一個(gè)測(cè)試運(yùn)行器,用于啟動(dòng)瀏覽器,運(yùn)行測(cè)試案例并將結(jié)果報(bào)告給我們。該工具的主要作用是將項(xiàng)目運(yùn)行在各種主流Web瀏覽器進(jìn)行測(cè)試。
Mocha:一個(gè)測(cè)試框架??山Y(jié)合chai斷言庫(kù)使用。
Chai:一個(gè)測(cè)試斷言庫(kù),提供了更好的斷言語(yǔ)法。所謂斷言,就是對(duì)組件做一些操作,并預(yù)言產(chǎn)生的結(jié)果。如果測(cè)試結(jié)果與斷言相同則測(cè)試通過(guò)。Chai斷言庫(kù)中,to be been is that which and has have with at of same but does這些語(yǔ)言鏈?zhǔn)菦]有意義的,只是便于理解而已。
BDD英文文檔
中文文檔
實(shí)踐 組件無(wú)依賴,無(wú)props對(duì)于無(wú)需導(dǎo)入任何依賴,也沒有props的,直接編寫測(cè)試案例即可。
MyComponent.vue
{{ message }}
MyComponent.spec.js
// 導(dǎo)入 Vue.js 和組件,進(jìn)行測(cè)試 import Vue from "vue" import MyComponent from "path/to/MyComponent.vue" describe("MyComponent", () => { // 檢查原始組件選項(xiàng) it("has a created hook", () => { expect(typeof MyComponent.created).to.eql("function") }) })組件有props
對(duì)于組件需要props,編寫單元測(cè)試時(shí),通過(guò)propsData傳遞該參數(shù)。
MyComponent.vue
{{ msg }}
MyComponent.spec.js
import Vue from "vue" import MyComponent from "path/to/MyComponent.vue" function getRenderedText (Component, propsDataMsg) { const Ctor = Vue.extend(Component) const vm = new Ctor({ propsData: propsDataMsg}).$mount() return vm.$el.textContent } describe("MyComponent", () => { it("renders correctly with different props", () => { expect(getRenderedText(MyComponent, { msg: "Hello" })).to.eql("Hello") expect(getRenderedText(MyComponent, { msg: "Bye" })).to.eql("Bye") }) })組件有依賴
若組件存在依賴,則可通過(guò)inject-loader解決。inject-loader可將任意依賴項(xiàng)注入到*.vue組件中。
MyComponent.vue
{{ msg }}
MyComponent.spec.js
//“!!”表示禁用全局配置的所有l(wèi)oaders?!皏ue-loader?inject!”表示使用vue-loader,傳入inject參數(shù)。 const ExampleInjector = require("!!vue-loader?inject!./example.vue") //運(yùn)行ExampleInjector函數(shù)返回一個(gè)MyComponent的實(shí)例,該實(shí)例中MyComponent組件的依賴項(xiàng)已被模擬。 const ExampleWithMocks = ExampleInjector({ // mock it "../service": { msg: "Hello from a mocked service!" } }) describe("MyComponent", () => { it("should render", () => { const vm = new Vue({ template: "異步操作", components: { "test": ExampleWithMocks } }).$mount() expect(vm.$el.querySelector(".msg").textContent).to.eql("Hello from a mocked service!") }) })
對(duì)于異步操作,it塊執(zhí)行的時(shí)候,需要傳入一個(gè)回調(diào)函數(shù),通常該函數(shù)被命名為done。當(dāng)測(cè)試結(jié)束的時(shí)候,必須顯式調(diào)用這個(gè)函數(shù),告訴Mocha測(cè)試結(jié)束了。否則,Mocha就無(wú)法知道,測(cè)試是否結(jié)束,會(huì)一直等到超時(shí)報(bào)錯(cuò)。
// 在狀態(tài)更新后檢查生成的 HTML it("updates the rendered message when vm.message updates", done => { const vm = new Vue(MyComponent).$mount() vm.message = "foo" // 在狀態(tài)改變后和斷言 DOM 更新前等待一刻 Vue.nextTick(() => { expect(vm.$el.textContent).to.eql("foo") done() }) })npm run unit
執(zhí)行 npm run unit 命令運(yùn)行單元測(cè)試。會(huì)產(chǎn)生結(jié)果列表:
若想看測(cè)試覆蓋率等情況,可在test/unit/coverage查看。
注意測(cè)試腳本都放在 test/unit/specs/ 目錄下。
腳本命名方式是[組件名].spec.js。
在karma.conf.js文件里修改karma配置。
單元測(cè)試默認(rèn)測(cè)試 src 目錄下除了 main.js 之外的所有文件,可在 test/unit/index.js 文件中修改。
測(cè)試腳本里面應(yīng)該包括一個(gè)或多個(gè)describe塊,每個(gè)describe塊應(yīng)該包括一個(gè)或多個(gè)it塊。
describe塊稱為"測(cè)試套件"(test suite),表示一組相關(guān)的測(cè)試。它是一個(gè)函數(shù),第一個(gè)參數(shù)是測(cè)試套件的名稱("加法函數(shù)的測(cè)試"),第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。
it塊稱為"測(cè)試用例"(test case),表示一個(gè)多帶帶的測(cè)試,是測(cè)試的最小單位。它也是一個(gè)函數(shù),第一個(gè)參數(shù)是測(cè)試用例的名稱("1 加 1 應(yīng)該等于 2"),第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。
Mocha在describe塊之中,提供測(cè)試用例的四個(gè)鉤子:before()、after()、beforeEach()和afterEach()。它們會(huì)在指定時(shí)間執(zhí)行。
參考:
單元測(cè)試
Testing with Mocks
Unit Testing
測(cè)試框架 Mocha 實(shí)例教程
Chai
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88388.html
摘要:但是,項(xiàng)目中的一些公共封裝,比如公共的組件公用的功能模塊等是可以使用單元測(cè)試的。因此特為組件庫(kù)引入單元測(cè)試,目的在于能減少組件的,避免重復(fù)的發(fā)布不必要的包。 項(xiàng)目github地址:https://github.com/yuanalina/installAsRequired這里必須要提前說(shuō)明,前端項(xiàng)目的單元測(cè)試不是必須的,特別是業(yè)務(wù)型項(xiàng)目,增加單元測(cè)試反而會(huì)成為累贅,增加開發(fā)成本且無(wú)意義...
摘要:是一個(gè)測(cè)試框架,在中配合斷言庫(kù)實(shí)現(xiàn)單元測(cè)試。腳本命名方式為組件名。單元測(cè)試默認(rèn)測(cè)試目錄下除了之外的所有文件,可在文件中修改。回收,一般在每個(gè)測(cè)試腳本測(cè)試完成后執(zhí)行回收。等元素事件名稱配置項(xiàng)觸發(fā)和事件,既觸發(fā)點(diǎn)擊事件。 ??百度網(wǎng)盤??提取碼:u6C4在使用vue-cli創(chuàng)建項(xiàng)目的時(shí)候,會(huì)提示要不要安裝單元測(cè)試和e2e測(cè)試。...
摘要:在前端進(jìn)階之路前端架構(gòu)設(shè)計(jì)測(cè)試核心這邊文章中通過(guò)分析了傳統(tǒng)手工測(cè)試的局限性去引出了測(cè)試驅(qū)動(dòng)開發(fā)的理念并介紹了一些測(cè)試工具這篇文章我將通過(guò)一個(gè)的項(xiàng)目去講解如何使用且結(jié)合官方推薦的去進(jìn)行單元測(cè)試的實(shí)戰(zhàn)一安裝我為本教程寫一個(gè)示例庫(kù)您可以直接 在《前端進(jìn)階之路: 前端架構(gòu)設(shè)計(jì)(3) - 測(cè)試核心》這邊文章中, 通過(guò)分析了傳統(tǒng)手工測(cè)試的局限性 去引出了測(cè)試驅(qū)動(dòng)開發(fā)的理念, 并介紹了一些測(cè)試工具....
摘要:為保證代碼的質(zhì)量,單元測(cè)試必不可少。本文記錄自己在學(xué)習(xí)單元測(cè)試過(guò)程中的一些總結(jié)。以一個(gè)項(xiàng)目為例,代碼結(jié)構(gòu)如下前端測(cè)試框架主要是與,這里我們選擇,斷言庫(kù)有以及自帶的。 為保證代碼的質(zhì)量,單元測(cè)試必不可少。本文記錄自己在學(xué)習(xí)單元測(cè)試過(guò)程中的一些總結(jié)。 TDD與BDD的區(qū)別 TDD屬于測(cè)試驅(qū)動(dòng)開發(fā),BDD屬于行為驅(qū)動(dòng)開發(fā)。個(gè)人理解其實(shí)就是TDD先寫測(cè)試模塊,再寫主功能代碼,然后能讓測(cè)試模塊通...
摘要:基礎(chǔ)知識(shí)作用為提供瀏覽器測(cè)試環(huán)境,為真正測(cè)試框架,為斷言庫(kù)測(cè)試用例基礎(chǔ)塊稱為測(cè)試套件,表示一組相關(guān)的測(cè)試。它也是一個(gè)函數(shù),第一個(gè)參數(shù)是測(cè)試用例的名稱,第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。 基礎(chǔ)知識(shí) karma作用為提供瀏覽器測(cè)試環(huán)境,mocha為真正測(cè)試框架,chai為斷言庫(kù) 測(cè)試用例基礎(chǔ) describe塊稱為測(cè)試套件(test suite),表示一組相關(guān)的測(cè)試。它是一個(gè)函數(shù),第一個(gè)...
閱讀 1686·2021-11-23 09:51
閱讀 1231·2019-08-30 13:57
閱讀 2325·2019-08-29 13:12
閱讀 2065·2019-08-26 13:57
閱讀 1257·2019-08-26 11:32
閱讀 1039·2019-08-23 15:08
閱讀 790·2019-08-23 14:42
閱讀 3137·2019-08-23 11:41