我是前端開發人員,也是TDD和BDD的新成員。學習單元測試和Jasmine
我有這個任務。使用從AJAX調用接收的json對象填充表格。我如何在套件和規範中描述這一點?
在此先感謝
編輯
我使用MVC BackboneJS和sinon.js爲間諜,存根等
我是前端開發人員,也是TDD和BDD的新成員。學習單元測試和Jasmine
我有這個任務。使用從AJAX調用接收的json對象填充表格。我如何在套件和規範中描述這一點?
在此先感謝
編輯
我使用MVC BackboneJS和sinon.js爲間諜,存根等
你沒有提到很多關於你使用的庫的內容,所以我將繼續前進並假設你的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...
});
既然你已經使用sinon.js,我認爲最好的辦法是使用fakeServer從Ajax調用接受測試的對象。這是很好的描述這裏(假Ajax和假冒服務器部分):
http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html
也期待在嘲諷和成株,因爲你可能不希望AJAX請求以實際火災。有很多圖書館,像這樣:http://sinonjs.org/(我沒有使用過,但它看起來很整潔) – d2kagw 2012-04-09 00:50:24
所有的偵探東西sinon供應是在茉莉花我相信。我們只是在茉莉花中使用方法間諜。我們確實希望Ajax請求被觸發 - 我們腦海中的測試點就是模仿用戶使用我們的代碼時的體驗。 – tkone 2012-04-09 00:57:25