使用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是否按照期望值進(jìn)行改變。
舉個例子:
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'));
});
大體意思為:
進(jìn)入路由/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包含多個測試助來輔助進(jìn)行驗收測試。一共有2種類型:異步助手asynchronous
和同步助手synchronous
異步測試助手可以意識到程序中的異步行為,使你可以更方便的編寫確切的測試。
同時,這些測試助手會按注冊的順序執(zhí)行,并且是鏈?zhǔn)竭\行。每個測試助手的調(diào)用都是在前一個調(diào)用結(jié)束之后,才會執(zhí)行下一個。因此,你可以不用當(dāng)心測試助手的執(zhí)行順序。
click(selector)
click
事件,返回一個異步執(zhí)行成功的promise
。fillIn(selector, value)
時,記得內(nèi)容錯誤
- 更新不及時
- 鏈接錯誤
- 缺少代碼/圖片示列
- 太簡單/步驟待完善
- 其他
更多建議: