我是前端开发人员,是 TDD 和 BDD 的新手。
我有这个任务。使用从 AJAX 调用接收到的 json 对象填充表。我将如何在套件和规范中描述这一点?
提前致谢
编辑
我将 BackboneJS 用于 MVC,将 sinon.js 用于间谍、存根等。
我是前端开发人员,是 TDD 和 BDD 的新手。
我有这个任务。使用从 AJAX 调用接收到的 json 对象填充表。我将如何在套件和规范中描述这一点?
提前致谢
编辑
我将 BackboneJS 用于 MVC,将 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