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

11

我该如何编写一个针对以下代码的QUnit测试:

function doSomethingWithAjax() {
    $.ajax({
        url: '/GetHelloWorld',
        success: function(data) { $("#responseFromServer").text(data); },
    });
}
Mockjax + qunit要求在ajax complete()方法中调用 start() 方法。
3个回答

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

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

    doSomethingWithAjax();

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

1

jasmine-ajax 库允许您定义模拟响应,而无需触及调用本身,适用于所有 ajax 调用。


你能分享一个使用jasmin-ajax解决OP问题的解决方案吗? - Ryan Gates

0

这个问题已经有几年了,对于新版本的jQuery和Jasmine来说有些变化。

如果你不想使用jasmine-ajax,可以尝试Michael Falaga的方法

  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]);
    });
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接