QUnit:如何在不修改ajax调用的情况下测试ajax调用

时间:2012-02-21 20:00:14

标签: jquery qunit mockjax

如何为此编写QUnit测试:

function doSomethingWithAjax() {
    $.ajax({
        url: '/GetHelloWorld',
        success: function(data) { $("#responseFromServer").text(data); },
    });
}

Mockjax + qunit需要在ajax complete()方法中调用start()。

3 个答案:

答案 0 :(得分:15)

test("should mock ajax", function() {

    $.ajax = function(options) {
        equals(options.url, "/GetHelloWorld");
        options.success("Hello");
    };

    doSomethingWithAjax();

    equal($("#responseFromServer").text(), "Hello");
});

答案 1 :(得分:1)

jasmine-ajax库允许您为所有ajax调用定义模拟响应,而无需自己触及调用。

答案 2 :(得分:0)

这个问题有几年了,jQuery和Jasmine的新版本已经发生了一些变化。

如果您不想使用jasmine-ajax,可以试试Michael Falaga's approach

  function ajax_response(response) {
    var deferred = $.Deferred().resolve(response);
    return deferred.promise();
  }

  describe("Test test", function() {
    beforeEach(function() {
      spyOn($, 'ajax').and.returnValue(
        ajax_response([1, 2, 3])
      );
    });
    it("is it [1, 2, 3]", function() {
      var response;
      $.ajax('GET', 'some/url/i/fancy').done(function(data) {
        response = data;
      });
      expect(response).toEqual([1, 2, 3]);
    });
  });