Created
October 18, 2016 18:40
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <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