一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 前端自動化測試:Vue 應用測試

前端自動化測試:Vue 應用測試

2021-07-01 00:00勾勾的前端世界西嶺 編程技術

測試不僅能夠驗證軟件功能、保證代碼質量,也能夠影響軟件開發的模式。TDD(Test-driven development),就是測試驅動開發,是敏捷開發中的一項核心實踐和技術,也是一種軟件設計方法論。

前端自動化測試:Vue 應用測試

項目環境搭建

 

運行 vue create [project-name] 來創建一個新項目。選擇 "Manually selectfeatures" 和 "UnitTesting",以及 "Jest" 作為 test runner。

前端自動化測試:Vue 應用測試

一旦安裝完成,cd 進入項目目錄中并運行 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 項目創建后,默認的 jest 配置文件:

  1. module.exports= { 
  2.   // 可加載模塊的后綴名 
  3.   moduleFileExtensions: [ 
  4.     'js'
  5.     'jsx'
  6.     'json'
  7.     // tell Jest to handle *.vue files 
  8.     'vue' 
  9.   ], 
  10.   // 轉換方式 
  11.   transform: { 
  12.     // process *.vue files with vue-jest 
  13.     // 如果.vue結尾的,使用vue-jest進行轉換 
  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.   // 轉換時忽略文件夾 
  20.   transformIgnorePatterns: ['/node_modules/'], 
  21.   // support the same @ -> src alias mapping in source code 
  22.   // webpack 的別名映射轉換 
  23.   moduleNameMapper: { 
  24.     '^@/(.*)$':'<rootDir>/src/$1' 
  25.   }, 
  26.   // 指定測試環境為 jsdom  
  27.   testEnvironment:'jest-environment-jsdom-fifteen'
  28.  
  29.   // serializer for snapshots 
  30.   // 快照序列化器 
  31.   // 使用 jest-serializer-vue 進行組件快照的序列化方式 
  32.   // 就是將組件轉為字符串,后面進行快照測試時,就可以看到了 
  33.   snapshotSerializers: [ 
  34.     'jest-serializer-vue' 
  35.   ], 
  36.  
  37.   // 測試代碼文件在哪里 
  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.   // 監視模式下的插件 
  45.   watchPlugins: [ 
  46.     require.resolve('jest-watch-typeahead/filename'), 
  47.     require.resolve('jest-watch-typeahead/testname'
  48.   ] 

快速體驗

 

默認測試用例:tests\unit\example.spec.js

  1. //tests\unit\example.spec.js 
  2. // 導入組件掛載器,不用手動寫vue入口 
  3. import { shallowMount } from'@vue/test-utils' 
  4. // 導入要測試的組件 
  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 測試環境,在正式開始 Vue 測試之前,我們先了解一下測試開發的方法。

測試開發方式

 

測試不僅能夠驗證軟件功能、保證代碼質量,也能夠影響軟件開發的模式。

測試開發有兩個流派:

  • TDD:測試驅動開發,先寫測試后實現功能
  • BDD:行為驅動開發,先實現功能后寫測試

什么是TDD

 

TDD(Test-driven development),就是測試驅動開發,是敏捷開發中的一項核心實踐和技術,也是一種軟件設計方法論。

它的原理就是在編寫代碼之前先編寫測試用例,由測試來決定我們的代碼。而且 TDD 更多地需要編寫獨立的測試用例,比如只測試一個組件的某個功能點,某個工具函數等。

TDD開發流程:

前端自動化測試:Vue 應用測試

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

單純運行測試代碼肯定報錯,有了測試代碼,為了通過測試,再具體寫 math 模塊中的 add() 方法:

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

Vue 3 的 TDD 測試用例

src\components\TodoHeader.vue 組件內容

  1. <template> 
  2.   <header> 
  3.    <h1>Todos</h1> 
  4.     <input  
  5.      v-model="inputValue" 
  6.      placeholder="What needs to be done?" 
  7.      data-testid="todo-input" 
  8.      @keyup.enter="handleNewTodo" 
  9.     /> 
  10.  </header> 
  11. </template> 

測試用例:

tests\unit\example.spec.js

  1. // 導入組件掛載器,不用手動寫vue入口 
  2. import { shallowMount } from'@vue/test-utils' 
  3. // 導入要測試的組件 
  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設置一個值 
  11.   const text ='helloworld' 
  12.   await input.setValue(text) 
  13.   // 觸發事件 
  14.   await input.trigger('keyup.enter'
  15.   // ========= 
  16.   // 以上是具體操作,輸入內容按下回車后,希望做什么?↓

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲 色 欧美 爱 视频 日韩 | 国产91短视频 | 美女禁区视频无遮挡免费看 | 成年人免费观看 | xxx95日本老师xxx学生 | 国产精品麻豆免费版 | 高清不卡免费一区二区三区 | yellow视频在线观看免费 | 大象传媒短视频网站 | 成在线人免费视频一区二区三区 | 国产成人综合手机在线播放 | 国产成人精品一区二三区 | 99综合网 | 99久久免费国产精品热 | 亚洲大爷操 | 日本视频高清免费观看xxx | 公妇乱淫在线播放免费观看 | 欧美一级视频在线 | 亚洲精品国产A久久久久久 亚洲精品福利一区二区在线观看 | 精品99视频| 久久中文字幕综合不卡一二区 | 岛国不卡| 欧美成人免费tv在线播放 | 国产最新进精品视频 | 丫鬟粗大狠狠贯穿h | 国产精品夜色视频一级区 | 免费永久视频 | 欧洲一级黑寡妇 | 亚洲大尺码 | 四虎4hu永久免费 | 精品香蕉99久久久久网站 | 偷偷狠狠的日日高清完整视频 | 32pao强力打造免费高速高清 | 特级非洲黑人一级毛片 | 欧美精选欧美极品 | 国产精品免费久久久久影院 | 久久综合狠狠综合久久综合88 | 调教处男 | 午夜一区二区福利视频在线 | 91小视频在线观看免费版高清 | 2020年新四虎免费 |