Ember 驗收測試

2018-01-06 18:08 更新

驗收測試

使用ember generate acceptance-test創(chuàng)建一個驗收測試,比如:

ember g acceptance-test login

執(zhí)行完畢命令之后得到如下文件內(nèi)容:

//tests/acceptance/login-test.js


import { test } from 'qunit';
import moduleForAcceptance from 'people/tests/helpers/module-for-acceptance';


moduleForAcceptance('Acceptance | login');


test('visting /login', function(assert) {
  visit('/login');


  andThen(function() {
   assert.equal(currentURL(), '/login');
  });
});

moduleForAcceptance用來啟動、終止程序。最后幾行test中包含了一個示例。

幾乎所有的測試都有一個路由請求,用于和頁面交互(通過helper)并檢查DOM是否按照期望值進行改變。

舉個例子:

test('should add new post', function(assert) {
  visit('/posts/new');
  fillIn('input.title', 'My new post');
  click('button.submit');
  andThen(() => assert.equal(find('ul.posts li:first').text(), 'My new post'));
});

大體意思為: 進入路由/posts/new,在輸入框input.title填入My new post,點擊button.submit,期望的結(jié)果是: 在對應(yīng)列表下ul.posts li.first的文本為My new post.

測試助手

在測試web應(yīng)用中的一個主要的問題是,由于代碼都是基于事件驅(qū)動的,因此他們有可能是異步的,會使代碼無序運行。

比如有兩個按鈕,從不同的服務(wù)器載入數(shù)據(jù),我們先后點擊他們,但可能結(jié)果返回的順序并不是我們點擊的順序。

當(dāng)你在編寫測試的時候,你需要特別注意一個問題,就是你無法確定在發(fā)出一個請求后,是否會立刻得到返回的響應(yīng)。因此,你的斷言需要以同步的狀態(tài)來等待被測試體。例如上面所舉的例子,應(yīng)該等待兩個服務(wù)器均返回數(shù)據(jù)后,這時測試代碼才會執(zhí)行其邏輯來檢測數(shù)據(jù)的正確性。

這就是為什么在做斷言的時候,Ember測試助手都是被包裹在一個確保同步狀態(tài)的代碼中。這樣做避免了對所有這樣的代碼都去做這樣的包裹,并且因為減少了模板代碼,從而提高了代碼的可讀性.

Ember包含多個測試助來輔助進行驗收測試。一共有2種類型:異步助手asynchronous和同步助手synchronous

異步測試助手

異步測試助手可以意識到程序中的異步行為,使你可以更方便的編寫確切的測試。

同時,這些測試助手會按注冊的順序執(zhí)行,并且是鏈?zhǔn)竭\行。每個測試助手的調(diào)用都是在前一個調(diào)用結(jié)束之后,才會執(zhí)行下一個。因此,你可以不用當(dāng)心測試助手的執(zhí)行順序。

  • click(selector)
    • 點擊一個元素,觸發(fā)該元素所綁定的click事件,返回一個異步執(zhí)行成功的promise
  • fillIn(selector, value)
    • 用執(zhí)行成功的promise值填充到選中的input元素上。使用時,記得內(nèi)容錯誤
    • 更新不及時
    • 鏈接錯誤
    • 缺少代碼/圖片示列
    • 太簡單/步驟待完善
    • 其他

    更多建議:

在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號