mojax
Version:
extendable ajax request module
92 lines (84 loc) • 3.34 kB
JavaScript
var chai = require("chai"),
expect = require("chai").expect,
sinon = require("sinon"),
sinonChai = require("sinon-chai"),
responseListener = require("../../lib/responseListener.js");
chai.use(sinonChai);
describe("responseListener()", function() {
var mockReq = {
readyState: 0,
response: "",
responseText: "",
responseType: "text",
status: undefined,
getAllResponseHeaders: function(){}
},
onSuccess = sinon.spy(),
onFailure = sinon.spy(),
onHeaders = sinon.spy(),
onOpen = sinon.spy(),
conf = {
url: "path/to/some/resource",
method: "GET",
responseType: "json",
onSuccess: [onSuccess],
onOpen: [onOpen],
onFailure: [onFailure],
onHeaders: [onHeaders]
};
it("should not trigger any callback while readyState = UNSENT (0)", function() {
// successful
responseListener(mockReq, conf);
expect(onSuccess).to.not.have.been.called;
expect(onFailure).to.not.have.been.called;
expect(onHeaders).to.not.have.been.called;
expect(onOpen).to.not.have.been.called;
});
it("should trigger only the onOpen callback while readyState = OPENED (1)", function() {
// successful
mockReq.readyState = 1;
responseListener(mockReq, conf);
expect(onSuccess).to.not.have.been.called;
expect(onFailure).to.not.have.been.called;
expect(onHeaders).to.not.have.been.called;
expect(onOpen).to.have.been.called;
});
it("should only trigger the onHeaders callback when readyState = HEADERS_RECEIVED (2)", function() {
// successful
mockReq.readyState = 2;
responseListener(mockReq, conf);
expect(onSuccess).to.not.have.been.called;
expect(onFailure).to.not.have.been.called;
expect(onHeaders).to.have.been.calledOnce;
expect(onOpen).to.have.been.called;
});
it("should only have triggered the onHeaders callback when readyState = LOADING (3)", function() {
// successful
mockReq.readyState = 3;
responseListener(mockReq, conf);
expect(onSuccess).to.not.have.been.called;
expect(onFailure).to.not.have.been.called;
expect(onHeaders).to.have.been.calledOnce;
expect(onOpen).to.have.been.called;
});
it("should trigger the onSuccess callback when readyState = DONE (4) && status = 2**", function() {
// successful
mockReq.readyState = 4;
mockReq.status = 200;
responseListener(mockReq, conf);
expect(onSuccess).to.have.been.calledOnce;
expect(onFailure).to.not.have.been.called;
expect(onHeaders).to.have.been.calledOnce;
expect(onOpen).to.have.been.called;
});
it("should trigger the onFailure callback when readyState = DONE (4) && status = 5** or 4**", function() {
// successful
mockReq.readyState = 4;
mockReq.status = 404;
responseListener(mockReq, conf);
expect(onSuccess).to.have.been.calledOnce;
expect(onFailure).to.have.been.calledOnce;
expect(onHeaders).to.have.been.calledOnce;
expect(onOpen).to.have.been.called;
});
});