Mock Ajax tests for Prototype.js cleaned up; small renames of interface to AjaxRequests
This commit is contained in:
parent
e7ca84008c
commit
c011d7542d
@ -36,21 +36,22 @@ Ajax.RealRequest = Class.create(Ajax.Request, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// generic
|
||||||
|
|
||||||
var ajaxRequests = [];
|
var ajaxRequests = [];
|
||||||
|
|
||||||
FakeAjaxTransport = Class.create({
|
function FakeAjaxTransport() {
|
||||||
initialize: function() {
|
|
||||||
this.overrideMimeType = false;
|
this.overrideMimeType = false;
|
||||||
this.readyState = 0;
|
this.readyState = 0;
|
||||||
this.setRequestHeader = jasmine.createSpy("setRequestHeader");
|
this.setRequestHeader = jasmine.createSpy("setRequestHeader");
|
||||||
this.open = jasmine.createSpy("open");
|
this.open = jasmine.createSpy("open");
|
||||||
this.send = jasmine.createSpy("send");
|
this.send = jasmine.createSpy("send");
|
||||||
this.abort = jasmine.createSpy("abort");
|
this.abort = jasmine.createSpy("abort");
|
||||||
},
|
|
||||||
getResponseHeader: function(name) {
|
this.getResponseHeader = function(name) {
|
||||||
return this.responseHeaders[name];
|
return this.responseHeaders[name];
|
||||||
}
|
};
|
||||||
});
|
}
|
||||||
|
|
||||||
function mostRecentAjaxRequest() {
|
function mostRecentAjaxRequest() {
|
||||||
if (ajaxRequests.length > 0) {
|
if (ajaxRequests.length > 0) {
|
||||||
|
@ -189,57 +189,75 @@ describe("Jasmine Mock Ajax (for Prototype.js)", function() {
|
|||||||
sharedAjaxResponseBehavior(sharedContext);
|
sharedAjaxResponseBehavior(sharedContext);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("the content type defaults to application/json", function () {
|
||||||
|
beforeEach(function() {
|
||||||
|
var response = {status: 200, responseText: "OK!"};
|
||||||
|
request.response(response);
|
||||||
|
|
||||||
|
sharedContext.responseCallback = onSuccess;
|
||||||
|
sharedContext.status = response.status;
|
||||||
|
sharedContext.contentType = "application/json";
|
||||||
|
sharedContext.responseText = response.responseText;
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should call the success handler", function() {
|
||||||
|
expect(onSuccess).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not call the failure handler", function() {
|
||||||
|
expect(onFailure).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should call the complete handler", function() {
|
||||||
|
expect(onComplete).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
sharedAjaxResponseBehavior(sharedContext);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("and the response is null", function () {
|
||||||
|
var on0;
|
||||||
|
beforeEach(function() {
|
||||||
|
on0 = jasmine.createSpy('on0');
|
||||||
|
|
||||||
|
request = new Ajax.Request("idontcare", {
|
||||||
|
method: 'get',
|
||||||
|
on0: on0,
|
||||||
|
onSuccess: onSuccess,
|
||||||
|
onFailure: onFailure,
|
||||||
|
onComplete: onComplete
|
||||||
|
});
|
||||||
|
|
||||||
|
var response = {status: null, responseText: "whoops!"};
|
||||||
|
request.response(response);
|
||||||
|
|
||||||
|
sharedContext.responseCallback = on0;
|
||||||
|
sharedContext.status = 0;
|
||||||
|
sharedContext.contentType = 'application/json';
|
||||||
|
sharedContext.responseText = response.responseText;
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not call the success handler", function() {
|
||||||
|
expect(onSuccess).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not call the failure handler", function() {
|
||||||
|
expect(onFailure).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should call the on0 handler", function() {
|
||||||
|
expect(on0).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should call the complete handler", function() {
|
||||||
|
expect(onComplete).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
sharedAjaxResponseBehavior(sharedContext);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// describe(".response", function() {
|
|
||||||
// it("should present responseJSON if contentType is application/json", function() {
|
|
||||||
// request = new Ajax.Request("http://example.com/someApi", {
|
|
||||||
// onSuccess: onSuccess,
|
|
||||||
// onFailure: onFailure,
|
|
||||||
// onComplete: onComplete
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// request.response({status: 201, contentType: "application/json", responseText: "{'foo':'bar'}"});
|
|
||||||
// expect(onSuccess).toHaveBeenCalled();
|
|
||||||
// var response = onSuccess.mostRecentCall.args[0];
|
|
||||||
// expect(response.getHeader('Content-type')).toEqual("application/json");
|
|
||||||
// expect(response.responseJSON).toEqual({foo: "bar"});
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it("should default to status 200", function() {
|
|
||||||
// request.response({contentType: "text/html", responseText: "Yay!"});
|
|
||||||
// expect(onSuccess).toHaveBeenCalled();
|
|
||||||
// expect(onComplete).toHaveBeenCalled();
|
|
||||||
// var response = onSuccess.mostRecentCall.args[0];
|
|
||||||
// expect(response.status).toEqual(200);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it("should default to contentType application/json", function() {
|
|
||||||
// request.response({status: 200, responseText: "{'foo':'bar'}"});
|
|
||||||
// expect(onComplete).toHaveBeenCalled();
|
|
||||||
// var response = onComplete.mostRecentCall.args[0];
|
|
||||||
// expect(response.getHeader('Content-type')).toEqual("application/json");
|
|
||||||
// expect(response.responseJSON).toEqual({foo: "bar"});
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it("should convert null response status to status 0", function() {
|
|
||||||
// request.response({status: null, responseText: ""});
|
|
||||||
// expect(onSuccess).toHaveBeenCalled();
|
|
||||||
// expect(onComplete).toHaveBeenCalled();
|
|
||||||
// var response = onSuccess.mostRecentCall.args[0];
|
|
||||||
// expect(response.status).toEqual(0);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it("should accept a string", function() {
|
|
||||||
// request.response("{'foo': 'bar'}");
|
|
||||||
// expect(onSuccess).toHaveBeenCalled();
|
|
||||||
// var response = onSuccess.mostRecentCall.args[0];
|
|
||||||
// expect(response.responseText).toEqual("{'foo': 'bar'}");
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
//});
|
|
||||||
|
|
||||||
function sharedAjaxResponseBehavior(context) {
|
function sharedAjaxResponseBehavior(context) {
|
||||||
describe("the response", function () {
|
describe("the response", function () {
|
||||||
var response;
|
var response;
|
||||||
@ -260,100 +278,3 @@ function sharedAjaxResponseBehavior(context) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
xdescribe("pockets.mock_ajax", function() {
|
|
||||||
var request, success, failure, complete;
|
|
||||||
|
|
||||||
beforeEach(function() {
|
|
||||||
success = jasmine.createSpy("success");
|
|
||||||
failure = jasmine.createSpy("failure");
|
|
||||||
complete = jasmine.createSpy("complete");
|
|
||||||
request = new Ajax.Request("balthazarurl", {onSuccess: success, onFailure: failure,
|
|
||||||
onComplete: complete});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should store URL and transport", function() {
|
|
||||||
expect(request.url).toEqual("balthazarurl");
|
|
||||||
expect(request.transport).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("AjaxRequests", function() {
|
|
||||||
it("should attach new AJAX requests to AjaxRequests.requests", function() {
|
|
||||||
expect(AjaxRequests.requests.length).toEqual(1);
|
|
||||||
expect(AjaxRequests.activeRequest()).toEqual(request);
|
|
||||||
var request2 = new Ajax.Request("balthazarurl2", {onSuccess: success, onFailure: failure,
|
|
||||||
onComplete: complete});
|
|
||||||
expect(AjaxRequests.requests.length).toEqual(2);
|
|
||||||
expect(AjaxRequests.activeRequest()).toEqual(request2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should let you clear AJAX requests", function() {
|
|
||||||
clearAjaxRequests();
|
|
||||||
expect(AjaxRequests.requests.length).toEqual(0);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe(".response", function() {
|
|
||||||
it("should pretend that the AJAX request returned a response with status, contentType, and responseText", function() {
|
|
||||||
request.response({status: 201, contentType: "text/html", responseText: "You have been redirected."});
|
|
||||||
expect(success).wasCalled();
|
|
||||||
expect(complete).wasCalled();
|
|
||||||
expect(failure).wasNotCalled();
|
|
||||||
var response = success.mostRecentCall.args[0];
|
|
||||||
expect(response.status).toEqual(201);
|
|
||||||
expect(response.getHeader('Content-type')).toEqual("text/html");
|
|
||||||
expect(response.responseText).toEqual("You have been redirected.");
|
|
||||||
expect(response.responseJSON).toEqual(null);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should call failure for error statuses", function() {
|
|
||||||
request.response({status: 500, contentType: "text/html", responseText: "Ar mateys."});
|
|
||||||
expect(success).wasNotCalled();
|
|
||||||
expect(complete).wasCalled();
|
|
||||||
expect(failure).wasCalled();
|
|
||||||
var response = failure.mostRecentCall.args[0];
|
|
||||||
expect(response.status).toEqual(500);
|
|
||||||
expect(response.getHeader('Content-type')).toEqual("text/html");
|
|
||||||
expect(response.responseText).toEqual("Ar mateys.");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should present responseJSON if contentType is application/json", function() {
|
|
||||||
request.response({status: 201, contentType: "application/json", responseText: "{'foo':'bar'}"});
|
|
||||||
expect(success).wasCalled();
|
|
||||||
var response = success.mostRecentCall.args[0];
|
|
||||||
expect(response.getHeader('Content-type')).toEqual("application/json");
|
|
||||||
expect(response.responseJSON).toEqual({foo: "bar"});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should default to status 200", function() {
|
|
||||||
request.response({contentType: "text/html", responseText: "Yay!"});
|
|
||||||
expect(success).wasCalled();
|
|
||||||
expect(complete).wasCalled();
|
|
||||||
var response = success.mostRecentCall.args[0];
|
|
||||||
expect(response.status).toEqual(200);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should default to contentType application/json", function() {
|
|
||||||
request.response({status: 200, responseText: "{'foo':'bar'}"});
|
|
||||||
expect(complete).wasCalled();
|
|
||||||
var response = complete.mostRecentCall.args[0];
|
|
||||||
expect(response.getHeader('Content-type')).toEqual("application/json");
|
|
||||||
expect(response.responseJSON).toEqual({foo: "bar"});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should convert null response status to status 0", function() {
|
|
||||||
request.response({status: null, responseText: ""});
|
|
||||||
expect(success).wasCalled();
|
|
||||||
expect(complete).wasCalled();
|
|
||||||
var response = success.mostRecentCall.args[0];
|
|
||||||
expect(response.status).toEqual(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should accept a string", function() {
|
|
||||||
request.response("{'foo': 'bar'}");
|
|
||||||
expect(success).wasCalled();
|
|
||||||
var response = success.mostRecentCall.args[0];
|
|
||||||
expect(response.responseText).toEqual("{'foo': 'bar'}");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
Loading…
Reference in New Issue
Block a user