Files
pjax/tests/lib/abort-request.js
Behind The Math c13149626b Prettier fixes
2019-03-03 01:37:45 -05:00

56 lines
1.8 KiB
JavaScript

var tape = require("tape");
var abortRequest = require("../../lib/abort-request.js");
var sendRequest = require("../../lib/send-request.js");
// Polyfill responseURL property into XMLHttpRequest if it doesn't exist,
// just for the purposes of this test
// This polyfill is not complete; it won't show the updated location if a
// redirection occurred, but it's fine for our purposes.
if (!("responseURL" in XMLHttpRequest.prototype)) {
var nativeOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url) {
this.responseURL = url;
return nativeOpen.apply(this, arguments);
};
}
tape("test aborting xhr request", function(t) {
var requestCacheBust = sendRequest.bind({
options: {
cacheBust: true
}
});
t.test("- pending request is aborted", function(t) {
var r = requestCacheBust("https://httpbin.org/delay/10", {}, function() {
t.fail("xhr was not aborted");
});
t.equal(r.readyState, 1, "xhr readyState is '1' (SENT)");
abortRequest(r);
t.equal(r.readyState, 0, "xhr readyState is '0' (ABORTED)");
t.equal(r.status, 0, "xhr HTTP status is '0' (ABORTED)");
t.equal(r.responseText, "", "xhr response is empty");
t.end();
});
t.test("- request is not aborted if it has already completed", function(t) {
var r = requestCacheBust("https://httpbin.org/get", {}, function() {
abortRequest(r);
t.equal(r.readyState, 4, "xhr readyState is '4' (DONE)");
t.equal(r.status, 200, "xhr HTTP status is '200' (OK)");
t.end();
});
});
t.test("- request is not aborted if it is undefined", function(t) {
var r;
try {
abortRequest(r);
} catch (e) {
t.fail("aborting an undefined request threw an error");
}
t.equal(typeof r, "undefined", "undefined xhr was ignored");
t.end();
});
t.end();
});