日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
前端自動(dòng)化測(cè)試:Vue應(yīng)用測(cè)試

項(xiàng)目環(huán)境搭建

運(yùn)行 vue create [project-name] 來創(chuàng)建一個(gè)新項(xiàng)目。選擇 "Manually selectfeatures" 和 "UnitTesting",以及 "Jest" 作為 test runner。

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、邵東ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的邵東網(wǎng)站制作公司

一旦安裝完成,cd 進(jìn)入項(xiàng)目目錄中并運(yùn)行 yarn test:unit。

通過 jest 配置文件:

\jest.config.js ==> node_modules\@vue\cli-plugin-unit-jest\jest-preset.js ==> \node_modules\@vue\cli-plugin-unit-jest\presets\default\jest-preset.js

jest-preset.js 文件就是 Vue 項(xiàng)目創(chuàng)建后,默認(rèn)的 jest 配置文件:

 
 
 
 
  1. module.exports= { 
  2.   // 可加載模塊的后綴名 
  3.   moduleFileExtensions: [ 
  4.     'js', 
  5.     'jsx', 
  6.     'json', 
  7.     // tell Jest to handle *.vue files 
  8.     'vue' 
  9.   ], 
  10.   // 轉(zhuǎn)換方式 
  11.   transform: { 
  12.     // process *.vue files with vue-jest 
  13.     // 如果.vue結(jié)尾的,使用vue-jest進(jìn)行轉(zhuǎn)換 
  14.     '^.+\\.vue$': require.resolve('vue-jest'), 
  15.     '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 
  16.     require.resolve('jest-transform-stub'), 
  17.     '^.+\\.jsx?$': require.resolve('babel-jest') 
  18.   }, 
  19.   // 轉(zhuǎn)換時(shí)忽略文件夾 
  20.   transformIgnorePatterns: ['/node_modules/'], 
  21.   // support the same @ -> src alias mapping in source code 
  22.   // webpack 的別名映射轉(zhuǎn)換 
  23.   moduleNameMapper: { 
  24.     '^@/(.*)$':'/src/$1' 
  25.   }, 
  26.   // 指定測(cè)試環(huán)境為 jsdom  
  27.   testEnvironment:'jest-environment-jsdom-fifteen', 
  28.  
  29.   // serializer for snapshots 
  30.   // 快照序列化器 
  31.   // 使用 jest-serializer-vue 進(jìn)行組件快照的序列化方式 
  32.   // 就是將組件轉(zhuǎn)為字符串,后面進(jìn)行快照測(cè)試時(shí),就可以看到了 
  33.   snapshotSerializers: [ 
  34.     'jest-serializer-vue' 
  35.   ], 
  36.  
  37.   // 測(cè)試代碼文件在哪里 
  38.   testMatch: [ 
  39.     '**/tests/unit/**/*.spec.[jt]s?(x)', 
  40.     '**/__tests__/*.[jt]s?(x)' 
  41.   ], 
  42.   // https://github.com/facebook/jest/issues/6766 
  43.   testURL:'http://localhost/', 
  44.   // 監(jiān)視模式下的插件 
  45.   watchPlugins: [ 
  46.     require.resolve('jest-watch-typeahead/filename'), 
  47.     require.resolve('jest-watch-typeahead/testname') 
  48.   ] 

快速體驗(yàn)

默認(rèn)測(cè)試用例:tests\unit\example.spec.js

 
 
 
 
  1. //tests\unit\example.spec.js 
  2. // 導(dǎo)入組件掛載器,不用手動(dòng)寫vue入口 
  3. import { shallowMount } from'@vue/test-utils' 
  4. // 導(dǎo)入要測(cè)試的組件 
  5. import HelloWorld from'@/components/HelloWorld.vue' 
  6.  
  7. describe('HelloWorld.vue', () => { 
  8.   it('rendersprops.msg when passed', () => { 
  9.     const msg ='newmessage' 
  10.     const wrapper =shallowMount(HelloWorld, { 
  11.       props: { msg } 
  12.     }) 
  13.     expect(wrapper.text()).toMatch(msg) 
  14.   }) 
  15. }) 
 
 
 
 
  1. $ npm runtest:unit 

搭建完基本的 Vue 測(cè)試環(huán)境,在正式開始 Vue 測(cè)試之前,我們先了解一下測(cè)試開發(fā)的方法。

測(cè)試開發(fā)方式

測(cè)試不僅能夠驗(yàn)證軟件功能、保證代碼質(zhì)量,也能夠影響軟件開發(fā)的模式。

測(cè)試開發(fā)有兩個(gè)流派:

  • TDD:測(cè)試驅(qū)動(dòng)開發(fā),先寫測(cè)試后實(shí)現(xiàn)功能
  • BDD:行為驅(qū)動(dòng)開發(fā),先實(shí)現(xiàn)功能后寫測(cè)試

什么是TDD

TDD(Test-driven development),就是測(cè)試驅(qū)動(dòng)開發(fā),是敏捷開發(fā)中的一項(xiàng)核心實(shí)踐和技術(shù),也是一種軟件設(shè)計(jì)方法論。

它的原理就是在編寫代碼之前先編寫測(cè)試用例,由測(cè)試來決定我們的代碼。而且 TDD 更多地需要編寫?yīng)毩⒌臏y(cè)試用例,比如只測(cè)試一個(gè)組件的某個(gè)功能點(diǎn),某個(gè)工具函數(shù)等。

TDD開發(fā)流程:

  • 編寫測(cè)試用例
  • 運(yùn)行測(cè)試
  • 編寫代碼使測(cè)試通過
  • 重構(gòu)/優(yōu)化代碼
  • 新增功能,重復(fù)上述步驟
 
 
 
 
  1. // tests\unit\example.spec.js 
  2. // 導(dǎo)入組件掛載器,不用手動(dòng)寫vue入口 
  3. import { shallowMount } from'@vue/test-utils' 
  4. // 導(dǎo)入要測(cè)試的組件 
  5. import HelloWorld from'@/components/HelloWorld.vue' 
  6.  
  7. import {add} from'@/utiles/math.js' 
  8. // 輸入:1,2 
  9. // 輸出:3 
  10. test('sum', () => { 
  11.   expect(add(1,2)).toBe(3) 
  12. }) 

單純運(yùn)行測(cè)試代碼肯定報(bào)錯(cuò),有了測(cè)試代碼,為了通過測(cè)試,再具體寫 math 模塊中的 add() 方法:

 
 
 
 
  1. // math.js 
  2. functionadd (a, b) { 
  3.   return a + b 
  4. exportdefault add 

Vue 3 的 TDD 測(cè)試用例

src\components\TodoHeader.vue 組件內(nèi)容

 
 
 
 
  1.  

測(cè)試用例:

tests\unit\example.spec.js

 
 
 
 
  1. // 導(dǎo)入組件掛載器,不用手動(dòng)寫vue入口 
  2. import { shallowMount } from'@vue/test-utils' 
  3. // 導(dǎo)入要測(cè)試的組件 
  4. import HelloWorld from'@/components/HelloWorld.vue' 
  5.  
  6. import TodoHeader from'@/components/TodoHeader.vue' 
  7. test('unit: new todo',async () => { 
  8.   const wrapper =shallowMount(TodoHeader) // 掛載渲染組件 
  9.   const input = wrapper.find('[data-testid="todo-input"]') // 查找input 
  10.   // 給input設(shè)置一個(gè)值 
  11.   const text ='helloworld' 
  12.   await input.setValue(text) 
  13.   // 觸發(fā)事件 
  14.   await input.trigger('keyup.enter') 
  15.   // ========= 
  16.   // 以上是具體操作,輸入內(nèi)容按下回車后,希望做什么?↓ 
  17.   // ========= 
  18.  
  19.   // 驗(yàn)證應(yīng)該發(fā)布一個(gè)對(duì)外的 new-todo 的事件 
  20.   expect(wrapper.emitted()['new-todo']).toBeTruthy() 
  21.   // 驗(yàn)證導(dǎo)出事件的參數(shù)是否是傳入的值 
  22.   expect(wrapper.emitted()['new-todo'][0][0]).toBe(text) 
  23.   // 驗(yàn)證文本框內(nèi)容是否清空 
  24.   expect(input.element.value).toBe('') 
  25.  
  26. }) 

src\components\TodoHeader.vue 組件內(nèi)容

 
 
 
 
  1. exportdefault { 
  2.   data(){ 
  3.     return { 
  4.       inputValue:'' 
  5.     } 
  6.   }, 
  7.   methods:{ 
  8.     handleNewTodo(){ 
  9.       if(this.inputValue.trim().length){ 
  10.         // 發(fā)布對(duì)外的 new-todo 事件值為文本框輸入內(nèi)容 
  11.         this.$emit('new-todo',this.inputValue) 
  12.         this.inputValue='' 
  13.       } 
  14.     } 
  15.   } 
  16. }; 

網(wǎng)頁標(biāo)題:前端自動(dòng)化測(cè)試:Vue應(yīng)用測(cè)試
網(wǎng)站地址:http://www.5511xx.com/article/cogdjje.html