2012-04-08 70 views
4

我是前端開發人員,也是TDD和BDD的新成員。學習單元測試和Jasmine

我有這個任務。使用從AJAX調用接收的json對象填充表格。我如何在套件和規範中描述這一點?

在此先感謝

編輯

我使用MVC BackboneJS和sinon.js爲間諜,存根等

回答

2

你沒有提到很多關於你使用的庫的內容,所以我將繼續前進並假設你的ajax請求包含使用jQuery的GET請求。

正常情況下應該是這樣的:

$.ajax({ 
    url: 'http://server/populate_table', 
    data: {foo: 'bar'}, 
    success: populate_table 
}); 

而且我會假設服務器將返回以下對象{row: [1, 2, 3]} 對於您需要模擬Ajax響應首發,因爲你不希望被依靠在您的服務器上可用。嘲諷,參數和數據的假返回檢查可以通過使用間諜這樣來實現:

var ajaxMock = spyOn($, 'ajax').andCallFake(function (options) { 
    expect(options.url).toEqual('http://server/populate_table'); 
    expect(options.data.foo).toEqual('bar'); 
    options.success({row: [1, 2, 3]}; 
}); 

注意如何通過上述定義有關的URL,並且應該由服務器之前接收到的數據的預期用結果調用回調。

最後,您需要查看您的表是否已填充。你不提供關於數據或表格的任何信息,但是再次猜測你使用的是jQuery,你應該嘗試一下jasmine-jquery。有了它,你可以很容易地描述你的DOM的期望,看看擴展的文檔。一旦你看中你想測試一下,你的完整測試將類似於:

it('populates the table making a JSON call', function() { 
    var ajaxMock = spyOn($, 'ajax').andCallFake(function (options) { 
     expect(options.url).toEqual('http://server/populate_table'); 
     expect(options.data.foo).toEqual('bar'); 
     options.success({row: [1, 2, 3]}; 
    }); 

    $.ajax({ 
     url: 'http://server/populate_table', 
     data: {foo: 'bar'}, 
     success: populate_table 
    }); 

    expect($('#mytable')).toExist(); 
    // DOM specific expectations go here... 

}); 
0

你想看看內置茉莉花asynchronous test設施。

具體爲waitForrun

快速解釋:您可以運行Ajax查詢,並在成功時返回true。您等待該功能,然後運行測試。

+0

也期待在嘲諷和成株,因爲你可能不希望AJAX請求以實際火災。有很多圖書館,像這樣:http://sinonjs.org/(我沒有使用過,但它看起來很整潔) – d2kagw 2012-04-09 00:50:24

+0

所有的偵探東西sinon供應是在茉莉花我相信。我們只是在茉莉花中使用方法間諜。我們確實希望Ajax請求被觸發 - 我們腦海中的測試點就是模仿用戶使用我們的代碼時的體驗。 – tkone 2012-04-09 00:57:25

相關問題