4

我是前端开发人员,是 TDD 和 BDD 的新手。

我有这个任务。使用从 AJAX 调用接收到的 json 对象填充表。我将如何在套件和规范中描述这一点?

提前致谢

编辑

我将 BackboneJS 用于 MVC,将 sinon.js 用于间谍、存根等。

4

3 回答 3

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...

});
于 2012-04-09T11:01:49.797 回答
0

您想查看jasmine 中内置的异步测试工具。

具体waitForrun

快速解释一下:您可以运行 Ajax 查询并让它在成功时返回 true。您等待该功能,然后运行您的测试。

于 2012-04-08T22:59:13.817 回答
0

由于您已经在使用 sinon.js,我认为最好的方法是使用 fakeServer 来测试从 ajax 调用接收到的对象。这里有很好的描述(假 Ajax 和假服务器部分):

http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html

于 2012-05-25T13:10:02.600 回答