如何使用jasmine测试ajax响应

时间:2016-04-14 11:21:45

标签: javascript ajax jasmine

我是茉莉花的新手。 我正在寻找一种方法来检查ajax响应中是否存在一个特定节点。我正在使用grunt运行jasmine命令行。我能够检查成功Ajax调用后是否调用了函数。我的代码看起来像这样。

describe("Ajax call test.", function () {
    it("should execute the callback function on success", function () {
        spyOn($, "ajax").and.callFake(function(options) {
            options.success();
        });
        var callback = jasmine.createSpy();
        getSampleResponse( callback);
        expect(callback).toHaveBeenCalled();
    });

    function getSampleResponse(callback){
        $.ajax({url: "template/sample.json", dataType:"text", success:function(res){            
            callback();
            }
        });
    }
});

我的sample.json文件看起来像这样。

{
   success: {

    "numSearches":5,
    "data":[
        {title:'search title 1', count:1},
        {title:'search title 2', count:1},
        {title:'search title 3', count:1},
        {title:'search title 4', count:1},
        {title:'search title 5', count:1}
    ]

  } 
}

我想检查响应是否包含success.numSearches。 我怎么能用茉莉花做这件事。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

拉​​杰什,

您已经使用模拟删除了实际的ajax调用。您是否希望测试针对numSearches的模拟响应?

在您的成功通话中,您没有将json响应res传递给您的回调方法。

这是一篇很好的文章来测试Jasmine中的ajax调用 http://www.htmlgoodies.com/html5/javascript/testing-ajax-event-handlers-using-jasmine-spies.html

测试ajax响应的一种方法是

describe("Ajax call test.", function () { it("should execute the callback function on success", function () { var callbackCalled = false; function myCallback(jsonData) { callbackCalled = true; expect(jsonData.numSearches).toBeEqual(5); } getSampleResponse(myCallback); expect(callbackCalled).toBeTruthy(); });

function getSampleResponse(callback){
    $.ajax({url: "template/sample.json", dataType:"text", success:function(res){            
        callback(res);
        }
    });
}

});`

请注意,我将res作为参数添加到您的回调方法