Skip to content

Instantly share code, notes, and snippets.

@Dewb
Created October 18, 2016 18:40
Show Gist options
  • Save Dewb/433eca3f503346e69eccf2a46b104c5e to your computer and use it in GitHub Desktop.
Save Dewb/433eca3f503346e69eccf2a46b104c5e to your computer and use it in GitHub Desktop.
How to make the following things play nicely together: node.js + jsdom // jquery ajax // sinon 1.7 fakeServer ajax mocking // typescript
/// <reference path="../../../aliases.d.ts" />
// make the following things play nicely together
// - node.js + jsdom
// - jquery ajax
// - sinon fakeServer ajax mocking
// - typescript
//
// adapted from https://codedump.io/share/ix1NvPhQNmz4/1/sinon-fakeserver-no-requests
var jsdom = require('jsdom');
var expect = require('chai').expect;
var vc = jsdom.createVirtualConsole();
vc.on("log", console.log.bind(console.log));
vc.on("jsdomError", function jsdomError(err: any) {
throw err;
});
var window: Window;
var $: JQueryStatic;
var modules: any = { sinon: undefined };
describe("ajax mock test", function() {
before(function (done) {
jsdom.env({
html: "",
scripts: ["node_modules/jquery/dist/jquery.js",
"node_modules/sinon/pkg/sinon.js"],
features: {
ProcessExternalResources: ["script"],
FetchExternalResources: ["script", "link"],
},
virtualConsole: vc,
done: function _done(error: any, w: any) {
if (error) {
throw error;
}
window = w;
$ = w.$;
modules.sinon = w.sinon;
done();
},
});
});
function getTodos(listId: any, callback: any) {
$.ajax({
url: "/todo/" + listId + "/items",
success: function (data) {
// Node-style CPS: callback(err, data)
callback(null, data);
}
});
}
var server: any;
var theData: any = { id: 1, text: "Provide examples", done: true };
before(function () {
server = modules.sinon.fakeServer.create();
server.respondWith(
"/todo/42/items",
[200, { "Content-Type": "application/json" }, JSON.stringify(theData)]
);
});
after(function () {
server.restore();
});
it("calls callback with correct deserialized data", function () {
var callback = modules.sinon.spy();
getTodos(42, callback);
server.respond();
expect(callback.calledOnce).to.be.true;
expect(callback.getCall(0).args[1]).to.deep.equal(theData);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment