日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

jset编写测试vue代码_详解使用jest对vue项目进行单元测试

發布時間:2025/4/5 vue 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jset编写测试vue代码_详解使用jest对vue项目进行单元测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近領導對前端提出了新的要求,要進行單元測試。之前使用vue做了一個快報名小程序的pc端頁面,既然要做單元測試,就準備用這個項目了,之前有些react的經驗,vue還是第一遭

vue-cli3.0單元測試方面更加完備,就先升級到了cli3.0,因為項目是用typescript寫的,需要ts-jest,得到jest的配置如下

{

"jest": {

"moduleFileExtensions": [

"js",

"jsx",

"json",

"vue",

"ts",

"tsx"

],

"transform": {

"^.+\\.vue$": "vue-jest",

".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub",

"^.+\\.tsx?$": "ts-jest"

},

"moduleNameMapper": {

"^@/(.*)$": "/src/$1"

},

"snapshotSerializers": [

"jest-serializer-vue"

],

"testMatch": [

"**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"

],

"testURL": "http://localhost/"

}

}

先從簡單的開始,測試了一個正則字符串常量文件,完美,一點問題沒有

然后開始測方案頁面的Scheme.vue組件,這個地方主要就想測一個computed屬性,將三種有代表性的情況寫完測試案例,興沖沖運行yarn test:unit Scheme.test.ts,結果還不錯,三個it測試用例都通過了,但后面還有一片紅是什么鬼

console.error node_modules/vue/dist/vue.runtime.common.js:589

[Vue warn]: Invalid prop: type check failed for prop "headerPic". Expected String, got Object.

原來是這個地方調用了一個組件,這個組件需要一個headerPic屬性,用作圖片的src,看源碼

感覺沒毛病啊,去vue-devtool,"/img/schemeSideNavPic.f988623b.jpg"是字符串啊,一點毛病沒有,應該不是require的問題啊,應該是require在jest里面的處理問題,再查看jest配置,已經對jpg等靜態文件做處理了,看了一下jest-transform-stub模塊的源碼,很簡單

module.exports = {

process: function() {

return ''

}

}

既對這些靜態文件返回空字符串,不做處理,這不就更不應該了呀,幸虧有vscode這款利器,可以方便調試源碼,使用vscode調試沒有報錯,也沒能讓調試器進入vue文件,沒辦法,在ts文件里const pic = require('../../../assets/scheme/schemeSideNavPic.jpg'),再次調試,發現

正是jest-transform-stub的內容,確實是個對象,跟在命令行內運行結果一致,也就是說只需要一直處理方式讓其返回為

module.exports = ""

查看jest官網,搜了一下css,運氣不錯😂, 處理靜態文件,moduleNameMapper選項完全可以滿足需求啊,

"moduleNameMapper": {

"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js"

}

fileMock.js內容

// __mocks__/fileMock.js

module.exports = 'test-file-stub';

就是說只要返回字符串就OK了,加上moduleNameMapper,測試完美的跑通了

接下來對Scheme.vue組件發起模擬點擊測試

const createScheme = wrapper.findAll('.sn-item').at(1)

createScheme.trigger('click')

expect((wrapper.vm as any).isCreateDialogShow).toBeTruthy()

expect(wrapper.find('.create-list-dialog').isVisible()).toBeTruthy()

使用vue-test-utils的api獲取createScheme元素,對其觸發點擊,測試isCreateDialogShow這個data值被設置成true, 使用的element-ui

:visible.sync="isCreateDialogShow"

width="600px"

class="create-list-dialog"

title="創建方案">

...

此dialog可見,順利通過

接下來再實驗一下新功能,快照,使用toMatchSnapshot方法也順利通過了

接下來來個大的,測試一下Login.vue,登陸頁面,主要測其調接口,然后成功設置store值,但不能走真實的網絡接口啊,這太慢不說,具體結果還不能預測,得使用mock數據

在項目中創建了axios.plugin.ts vue插件,這可怎么mock呀,再看官方文檔,感覺Manual Mocks部分最合適,但是舉例也不適合vue 插件mock啊,繼續瀏覽網站,不知道是受哪的啟發還是突然開竅了,應該是受fs模塊啟發,突然知道怎么mock插件了,mock一個模塊只需要模仿其型即可,具體實現,就無所謂了,這個http請求插件的mock必須能返回我們期望的值啊,fs模塊的__setMockFiles又給了我啟示,可以直接給接口的返回result設值啊,然后就有來下面的

__mocks__/axios.plugin.ts文件

const MockAxios = {} as any

let result = {} as any

MockAxios.install = (Vue: any, options: any) => {

Vue.prototype.$axios = function () {

/* eslint-disable prefer-promise-reject-errors */

return new Promise((resolve, reject) => {

if (result.ResultCode === '200') {

return result.Info

} else {

reject({ code: result.ResultCode, msg: result.Message, info: result.Info })

}

})

}

}

MockAxios.__setMockData = (data: any) => {

result = data

}

export default MockAxios

然后一馬平川了,localVue.use(Vuex), localVue.use(AxiosPlugin)

const mockData = {

ResultCode: '200',

Msg: true,

Info: {

OpenId: 99,

UserId: 92003,

},

}

AxiosPlugin.__setMockData(mockData)

(wrapper.vm as any).login({ code: '29992' }).then(() => {

expect(wrapper.vm.$store.state.userInfo.OpenId).toBe(mockData.Info.OpenId)

expect(wrapper.vm.$store.state.userInfo.UserId).toBe(mockData.Info.UserId)

})

完美通過,vue的單元測試框架算是基本搭好了,也能給領導說說了

給領導看還得有個覆蓋率報告

yarn test:unit --coverage

覆蓋的文件比較少啊,不包含所有的源文件啊,需要加入collectCoverageFrom配置項,至此整個單元測試就比較完備了

下面是完整jest的配置

{

"jest": {

"moduleFileExtensions": [

"js",

"jsx",

"json",

"vue",

"ts",

"tsx"

],

"transform": {

"^.+\\.vue$": "vue-jest",

".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub",

"^.+\\.tsx?$": "ts-jest"

},

"moduleNameMapper": {

"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js",

"^@/(.*)$": "/src/$1"

},

"snapshotSerializers": [

"jest-serializer-vue"

],

"testMatch": [

"**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"

],

"testURL": "http://localhost/",

"collectCoverageFrom": [

"**/*.{vue,ts}",

"!**/node_modules/**",

"!**/*.d.ts"

]

}

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的jset编写测试vue代码_详解使用jest对vue项目进行单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品少妇久久久久久 | 岛国精品一区 | 一区=区三区乱码 | 97热久久| 西西4444www大胆无视频 | a级免费视频 | 精品人妻无码一区二区性色 | 黄色片网站在线观看 | 精品乱码一区二区三区 | 99热网站 | 国产精品无码AV | www.色视频 | 国产精品99久久久久久一二区 | av网址在线免费观看 | 春闺艳妇(h)高h产乳 | 在线观看av网页 | 真性中出| 婷婷丁香一区二区三区 | 美女露隐私网站 | 美女校花脱精光 | 丁香婷婷一区二区三区 | 妺妺窝人体色www在线小说 | 在线国产一区二区三区 | 淫片一级国产 | 久久久精品一区二区三区 | 很黄很黄的网站 | 成年人福利网站 | 国产一区在线观看免费 | 国产精品亚洲一区二区 | 久久久久国产视频 | 一级在线视频 | 男人捅爽女人 | 成人久久精品人妻一区二区三区 | 95视频在线观看 | 小镇姑娘国语版在线观看免费 | av天天看 | 国产成人三级在线观看视频 | 天堂中文网在线 | 91大片免费看 | aa级黄色片 | 五月婷婷丁香花 | 久久中文娱乐网 | 久久九九热视频 | 欧美激情成人 | 成人动漫av在线 | 中文字幕韩日 | 粉嫩av渣男av蜜乳av | 无码久久av一区二区三区 | 日本人妻一区 | av手机免费看 | 黄色二级毛片 | 成人免费影视网站 | 亚洲精品国产精品乱码视色 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲50p| 欧美涩涩涩 | 国产+日韩+欧美 | 亚洲欧美一区二区视频 | 亚洲色图丝袜美腿 | 精品人妻人人做人人爽夜夜爽 | 亚瑟av在线| 性一交一乱一色一免费无遮挡 | 久久九九免费视频 | 蜜臀av在线观看 | 国产剧情精品在线 | 在线播放成人av | 亚洲一区色| 人人爽人人爽人人片 | 欧美日韩激情在线一区二区三区 | 日韩精品视频免费 | h在线观看视频 | 日韩成人av一区 | 久久久久国产精品区片区无码 | 西西444www大胆无视频 | 3d成人动漫在线观看 | 大又大粗又爽又黄少妇毛片 | 久久99国产精品久久99 | www色视频| 丁香网五月天 | 中文字幕乱码亚洲精品一区 | 国产一二三区免费视频 | 亚洲欧美日本在线观看 | 精品国产一二区 | 国产 一二三四五六 | 精品久久久久久久久久久久久久久 | 国产黄频| 精品久久香蕉国产线看观看亚洲 | 日韩性网站 | 无码精品人妻一区二区 | 日本成人免费视频 | 日本最新中文字幕 | 天天干夜夜 | 国产在线一二三区 | 国产精品一区二区三区四区在线观看 | 成人在线播放网站 | 黄色av网站在线播放 | 男女av | 91蝌蚪在线观看 | 丰满少妇中文字幕 |