2012-04-08 74 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

相关问题