describe("FakeXMLHttpRequest", function() { var xhr; beforeEach(function() { xhr = new FakeXMLHttpRequest(); }); it("should have an initial readyState of 0 (uninitialized)", function() { expect(xhr.readyState).toEqual(0); }); describe("when opened", function() { beforeEach(function() { xhr.open("GET", "http://example.com") }); it("should have a readyState of 1 (open)", function() { expect(xhr.readyState).toEqual(1); }); describe("when sent", function() { it("should have a readyState of 2 (sent)", function() { xhr.send(null); expect(xhr.readyState).toEqual(2); }); }); describe("when a response comes in", function() { it("should have a readyState of 4 (loaded)", function() { xhr.response({status: 200}); expect(xhr.readyState).toEqual(4); }); }); describe("when aborted", function() { it("should have a readyState of 0 (uninitialized)", function() { xhr.abort(); expect(xhr.readyState).toEqual(0); }); }); }); it("can be extended", function(){ FakeXMLHttpRequest.prototype.foo = function(){ return "foo"; } expect(new FakeXMLHttpRequest().foo()).toEqual("foo"); }); });