1. 程式人生 > >Vue-cli 僅使用mocha進行單元測試

Vue-cli 僅使用mocha進行單元測試

vue-cli+mocha單元測試

什麼是mocha

我的理解就是,mocha是一個測試框架,它提供給你很多斷言介面,你可以使用它的介面寫一些測試檔案,來看看輸出是否符合預期。

mocha有一些很有用的輔助函式庫

比如util.js,vue/test.js這些網上教程很多了,我也不是很懂,就不多說了

寫測試檔案需要操作DOM

在.vue單檔案的測試中,比較多的是以下幾種情況(根據我自身的經驗,我經驗很少)

  1. 是否正確渲染,vue例項,例如下面的vue元件的msg是否成功被渲染到html
<template>
    <div id = "footer">
        <
span
>
{{msg}}</span> </div> </template> <script> export default { data() { return { msg:"Hello,world" } } } </script>

mocha庫提供了介面,expect().xxxxxx.equal()
,這裡,xxxxx是類似自然語言,為了提高程式可讀性的,常見的有,have,to,be等等,具體可以去mocha官網文件檢視
這種情況很簡單,可以向下面的程式碼這樣來寫

describe('render message test'
, () => { it('should render correct msg', () => { let Constructor = Vue.extend(HelloWorld) const vm = new Constructor() //建立vue例項後,msg 應該為HEllo,world expect(vm.msg).to.equal('Hello,world') let vmm = vm.$mount() //渲染掛載後,例項的msg應該是Hello,world expect(vmm.msg).to.equal('Hello,world'
) }) })
  1. 父元件的資料是否正確傳入子元件
<template>
    <div id = "footer">
        <span>{{msg}}</span>
    </div>
</template>
<script>
export default {
	props: {
		msg: {
			type: String
			required: true
		}
	}
}
</script>

這裡HelloWorldz元件接收來自父元件的msg,然後渲染到html中,測試檔案可以直接傳給元件一個props,檢視他是否正確渲染,程式碼中用到的propsData可以Vue.js官方文件的API裡看到

describe('render message test', () => {
  it('should render correct msg', () => {
    let Constructor = Vue.extend(HelloWorld)
    const vm = new Constructor({
      propsData: {
      	msg: 'Hello, vue'
      }
    })
//例項的渲染    
    expect(vm.msg).to.equal('Hello,vue')
  })
//掛載後的渲染
let vmm = vm.$mount()
expect(vmm.msg).to.equal('Hello,vue')
})
  1. 觸發鍵盤或者滑鼠事件
    這裡就要用到javascript如何操作DOM的知識,可以看看菜鳥教程裡的HTML DOM,比較全面
    javacript操作DOM,模擬事件觸發需要三步
    • 建立事件,const evt = doucument.createEvent('EVENT')
    • 初始化事件, evt.initEvent('event', options)
    • 派發事件,trigger,element.dispatchEvent(evt)
      第一步裡EVENT是事件描述,有keyboardEvent, MouseEvent,Event等
      第二步裡event是具體的事件,滑鼠事件有click,鍵盤事件有keydown,keyup等等
      第三步裡element是觸發事件的html元素,即繫結這個事件的html元素,用querySelector(' ')是很方便的
      請看下面的事例
<template>
  <section id="todo-section">
    <input
    type="text"
    class="todo-input"
    v-model="todo"
    @keyup.enter="handleSubmit"
    />
  </section>
</template>

<script>

export default {
  data: function () {
    return {
      todo: '',
      list: []
    }
  },
  methods: {
    handleSubmit () {
      var item = {
        name: this.todo,
        completed: false
      }
      this.list.unshift(item)
      this.todo = ''
    }
  }
}
</script>
describe('test for todolist', () => {
  it('should render correct input', () => {
  //初始化TodoList元件例項
    const Constructor = Vue.extend(TodoList)
    let vm = new Constructor()
  //TodoList 裡有一個todo, data
    vm.todo = 'getup'
    let vmm = vm.$mount()
//檢查input裡todo是否被渲染出來
   expect(vmm.$el.querySelector('.todo-input').value)
      .equal('getup')
//觸發事件
    const evt = document.createEvent('Events')
    evt.initEvent('keyup', true, true)
    evt.keyCode = 13
    vmm.$el.querySelector('.todo-input').dispatchEvent(evt)
    
//檢查事件是都成功,即按下enter,todo被放入list
 expect(vm.list[0].name).equal('getup')
  })
})
  1. 子元件是否成功向父元件傳遞資訊
    可以養parent.$children訪問子元件,那就很簡單了,只要父元件創立後,訪問子元件,利用上述方法觸發子元件的事件,從而$emit向父元件傳遞資料,觸發父元件的事件
    這裡不再提供具體事例,感興趣的朋友可以留言,其實理解了上面的內容,最後一種情況很容易就想到怎麼做了,需要注意的是
  • 在建立vue例項後,掛載後,再次修改vue例項,是需要重新掛載的
  • 訪問子元件,要通過掛載後的父元件,未掛載的父元件是沒有子元件的,都沒掛載哪裡來元件

總結

我沒有學過javascript,本學期課程要求自學前端的知識,我選擇了學習Vue,過程比較坎坷,在上文敘述過程中多是經驗說,如果有理論層面的錯誤,希望大家留言指正,感激不已!

望與君共同進步~

相關推薦

Vue-cli 使用mocha進行單元測試

vue-cli+mocha單元測試 什麼是mocha 我的理解就是,mocha是一個測試框架,它提供給你很多斷言介面,你可以使用它的介面寫一些測試檔案,來看看輸出是否符合預期。 mocha有一些很有用的輔助函式庫 比如util.js,vue/test.js這些網

如何對第一個Vue.js組件進行單元測試 (下)

發生 清理 定位元素 after 斷言 www. array 12c 良好的 我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的組件,並將其存儲在我們將執行斷言的變量中。我們還可以通過propsData屬性傳遞道具作為對象。

vue-cli生成的項目中使用karma+chrome進行單元測試

使用 設計實現 測試用例 runner 服務 進行 ui界面 包含 node 用vue-cli生成項目時,如果選擇了單元測試,那麽會采用karma+mocha作為單元測試框架,默認使用的瀏覽器是PhantomJs。 Karma是一個基於Node.js的JavaScri

vue-cli(增加/進行單元測試,所遇到的問題及解決方法。 dom節點為null等

1、用vue-cli生成一個新的專案,把單元測試需要的檔案直接複製到你現有的專案中 2.增加啟動入口 "unit": "karma start test/unit/karma.conf.js --single-run" 3.安裝單元測試需要的外掛 npm i

如何對第一個Vue.js元件進行單元測試 (上)

  首先,為什麼要單元測試元件?   單元測試是持續整合的關鍵。通過專注於小的、獨立的實體,確保單元測試始終按預期執行,使程式碼更加可靠,你可以放心地迭代你的專案而不必擔壞事兒。   單元測試不僅限於指令碼。可以獨立測試的任何東西都是可單元測試的,只要你遵循一些好的做法。這些例項包括單一責任、可預測性和鬆

如何對第一個Vue.js元件進行單元測試 (下)

我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的元件,並將其儲存在我們將執行斷言的變數中。我們還可以通過propsData屬性傳遞道具作為物件。 已安裝的元件是一個物件,它有一些實用方法: 然後,我們可以寫第一個斷言: 讓我們來

[譯] 對 Vue-Router 進行單元測試

圖片描述(最多50字) 由於路由通常會把多個元件牽扯到一起操作,所以一般對其的測試都在 端到端/整合 階段進行,處於測試金字塔的上層。不過,做一些路由的單元測試還是大有益處的。 對於與路由互動的元件,有兩種測試方式: 使用一個真正的 router 例項 mock 掉 $route

NUnit.Framework在VS2015中如何進行單元測試

開放 ron 微軟 strong 擴展 分享 方案 mar 項目 微軟在VS2015中加入了自動化生成測試功能, 在需要測試的源文件的公共方法中右鍵既可以創建單元測試。 不過需要註意的是,要在公共方法中創建,否則會提示這個錯誤 如下是自動化單元測試界面,可以發

springMVC整合Junit4進行單元測試

main方法 pri tail println test pan ati 測試的 tco 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 用Junit做單元測試的好處多多,博主領悟到了兩點。一是不用在每個類裏面都寫main方法然後去測試;二是可以得到每個方法執行

Glib 對 C 函數進行單元測試

error ati 完成 structure 是否 pac str txt b- 1. Glib 單元測試框架 Glib 為單元測試提供了一套完整的測試框架,每個測試運行包括以下幾個部分 測試數據結構 測試 setup 與 teardown 函數 測試函數 2. 單元測

【轉載】IntelliJ IDEA配置JUnit進行單元測試

dbd ima pom.xml format height eight nsh 格式 oot 前提條件 安裝JDK,並配置好環境變量 工程已解決JUnit依賴關系(pom.xml) IDEA中JUnit配置 IDEA自帶一個JUnit插件,打開Settings窗口搜

Spring整合Junit4進行單元測試

CA spa dep pat unit ati 測試 ID sco 一. 添加依賴包(maven) <dependency>   <groupId>junit</groupId>   <artifactId>junit<

IDEA 自動生成Junit進行單元測試

沒有 src ner acc 路徑 name cep csdn ctr 1,從插件資源庫中搜索JunitGenerator V2.0版本,通過此工具自動完成test類的生成。Settings > Plugins 2,配置生成test類的路徑。Settings &

PHPstorm配置PHPunit對composer引入的php代碼進行單元測試

擴展方法 alt 安裝 load date 分享圖片 trap use str 1、 如何安裝PHPunit,這裏不展述(如需打斷點debug測試,安裝PHP的xdebug擴展方法也不展開說了 https://xdebug.org/) 2、如何進行配置 以 PHP設計

Android Studio中進行單元測試

term pack jsb java 測試的 dep create stat multi 在Android開發過程中,我們往往忽略了單元測試功能, 主要還能還是大家覺得 真機在手,運行調試特別直觀。 不過如果我們能夠養成單元測試的習慣,相信能更加提升我們應用開發的速度。

Spring Boot 項目在 IDEA 中 進行單元測試

res sin run ng- targe clas 單元測試 2.0 就會 Spring Boot提供了許多實用程序和註釋來幫助您測試應用程序。 測試由兩個模塊提供支持:spring-boot-test包含核心項,spring-boot-test-autoconfigur

Sping MVC 整合Junit4進行單元測試及常見錯誤解決

bat 手工 jar包 測試 ava spin .get sco 多個 1.Sping整合Junit4進行單元測試:使用spring-test和Junit4進行單元測試 (1)maven依賴:添加spring-test和Junit4 jar包對於jdk1.7版本,sprin

如何開始用Junit進行單元測試

nbsp gif isp public aik 分享 pan 因此 可操作性 近段時間,公司預備推動單元測試以提高轉測代碼的質量,借鑒學習一些測試大佬的經驗自己試了一把,小測我在此寫下初寫單元測試的心得,希望能和大家交流交流單元測試技術! 一、概述 1、 單元測試(

用flask開發個人部落格(28)—— 利用unittest進行單元測試

下面分析下這個webapp的單元測試模組test,請先看下目前test下的檔案結構:        目前__init__.py檔案還是空,請檢視test_basic.py的程式碼: import unittest from flask impor

(轉)使用CUnit進行單元測試和覆蓋率統計

CUnit安裝 如果能聯網的話,直接 yum install CUnit-devel.x86_64 就完成安裝了,注意要安裝devel版本,這樣才能找到標頭檔案。 編寫單元測試程式碼 CUnit的測試是單執行緒啟動,只能註冊一個Test Regis