我是前端开发人员,也是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