describe "Teabag.fixture", -> beforeEach -> fixture.cache = {} fixture.cleanup() @mockXhr = readyState: 4 status: 200 responseText: "_content_" getResponseHeader: -> "_type_" open: -> send: -> @xhrSpy = spyOn(@mockXhr, 'open') @xhrSpy try spyOn(window, 'XMLHttpRequest').andReturn(@mockXhr) catch e spyOn(window, 'ActiveXObject').andReturn(@mockXhr) describe "@load", -> it "loads all of the files requested", -> fixture.load("fixture.html", "fixture.json") expect(@xhrSpy).toHaveBeenCalledWith("GET", "/teabag/fixtures/fixture.html", false) expect(@xhrSpy).toHaveBeenCalledWith("GET", "/teabag/fixtures/fixture.json", false) it "caches the type/contents of those files", -> fixture.load("fixture.html") @mockXhr.onreadystatechange() expect(fixture.cache["fixture.html"]).toEqual(type: "_type_", content: "_content_") it "throws an exception if unable to load a file", -> fixture.load("foo.html") @mockXhr.status = 500 expect(=> @mockXhr.onreadystatechange()).toThrow("Unable to load fixture \"foo.html\".") it "adds the contents of files to a fixture element", -> fixture.load("fixture.html") @mockXhr.onreadystatechange() expect(document.getElementById("teabag-fixtures").tagName).toBe("DIV") expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content_") expect(document.getElementById("teabag-fixtures")).toBe(fixture.el) it "allows appending file contents to the fixture element", -> fixture.load("fixture.html1") @mockXhr.onreadystatechange() expect(document.getElementById("teabag-fixtures").tagName).toBe("DIV") expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content_") fixture.load("fixture.html2", true) @mockXhr.onreadystatechange() expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content__content_") fixture.load("fixture.html3", false) @mockXhr.onreadystatechange() expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content_") it "handles JSON fixtures", -> @mockXhr.responseText = '{"foo": "bar"}' @mockXhr.getResponseHeader = -> "application/json; encoding-blah" fixture.load("fixture.json") @mockXhr.onreadystatechange() expect(fixture.json.length).toBe(1) expect(fixture.json[0]).toEqual(foo: "bar") describe "@set", -> it "adds all the contents passed to a fixture element", -> fixture.set("_content1_", "_content2_") expect(document.getElementById("teabag-fixtures").tagName).toBe("DIV") expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content1__content2_") it "allows appending contents to the fixture element", -> fixture.set("_content1_") expect(document.getElementById("teabag-fixtures").tagName).toBe("DIV") expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content1_") fixture.set("_content2_", true) expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content1__content2_") fixture.set("_content3_", false) expect(document.getElementById("teabag-fixtures").innerHTML).toBe("_content3_") describe "@preload", -> it "loads all of the files requested", -> fixture.preload("fixture.html", "fixture.json") expect(@xhrSpy).toHaveBeenCalledWith("GET", "/teabag/fixtures/fixture.html", false) expect(@xhrSpy).toHaveBeenCalledWith("GET", "/teabag/fixtures/fixture.json", false) expect(document.getElementById("teabag-fixtures")).toBe(null) it "caches the type/contents of those files", -> fixture.preload("fixture.html") @mockXhr.onreadystatechange() expect(fixture.cache["fixture.html"]).toEqual(type: "_type_", content: "_content_")