QUnit:如何在不修改ajax调用的情况下测试ajax调用
如何为此编写QUnit测试:
function doSomethingWithAjax() { $.ajax({ url: '/GetHelloWorld', success: function(data) { $("#responseFromServer").text(data); }, }); }
Mockjax + qunit需要在ajax complete()方法中调用start()。
test("should mock ajax", function() { $.ajax = function(options) { equals(options.url, "/GetHelloWorld"); options.success("Hello"); }; doSomethingWithAjax(); equal($("#responseFromServer").text(), "Hello"); });
jasmine-ajax库允许您为所有ajax调用定义模拟响应,而无需触及调用本身。
这个问题有几年了,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]); }); });