describe("hx-ws attribute", function() { function mockWebsocket() { var listener; var lastSent; var wasClosed = false; var mockSocket = { addEventListener : function(message, l) { listener = l; }, write : function(content) { return listener({data:content}); }, send : function(data) { lastSent = data; }, getLastSent : function() { return lastSent; }, close : function() { wasClosed = true; }, wasClosed : function () { return wasClosed; } }; return mockSocket; } beforeEach(function () { this.server = makeServer(); var socket = mockWebsocket(); this.socket = socket; clearWorkArea(); htmx.createWebSocket = function(){ return socket }; }); afterEach(function () { this.server.restore(); clearWorkArea(); }); it('handles a basic call back', function () { var div = make('
div1
div2
'); this.socket.write("
replaced
") byId("d1").innerHTML.should.equal("replaced"); byId("d2").innerHTML.should.equal("div2"); }) it('handles a basic send', function () { var div = make('
div1
'); byId("d1").click(); var lastSent = this.socket.getLastSent(); var data = JSON.parse(lastSent); data.HEADERS["HX-Request"].should.equal("true"); }) it('is closed after removal', function () { this.server.respondWith("GET", "/test", "Clicked!"); var div = make('
'); div.click(); this.server.respond(); this.socket.wasClosed().should.equal(true) }) it('is closed after removal with no close and activity', function () { var div = make('
'); div.parentElement.removeChild(div); this.socket.write("
replaced
") this.socket.wasClosed().should.equal(true) }) });