Problem: Your Node.js code uses request or http to make http requests to URLs. You don’t want to make actual http calls, nor do you want to test request and/or http. How can you test that your code works as intended and interfaces properly with request and http?
Solution: Use nock. For the purposes of this example, I’ll also demonstrate how nock works in concert with mocha and expect.js.
Your node module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | // Let's call this file/module flickr-feeder.js
var request = require("request")
, _ = require("underscore");
exports.getFlickrJSON = function(params, callback) {
var url = "http://api.flickr.com/services/feeds/photos_public.gne";
var paramsObj = {
'format': 'json'
};
_.extend(paramsObj, params);
request(url, {qs: paramsObj}, function (error, response, body) {
callback(body);
});
};
|
Example Usage
1
2
3
4
5 | var ff = require('flickr-feeder');
// get JSON data from http://api.flickr.com/services/feeds/photos_public.gne?id=someFlickrID&format=json
ff.getFlickrJSON({id: 'someFlickrID'}, function (data) {
console.log(data); // the JSON response from Flickr
});
|
Test Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | // This file is lives in test/flickr-feeder.js
var flickrFeeder = require('../flickr-feeder.js')
, nock = require('nock')
, expect = require('expect.js');
describe("flickrFeeder", function() {
describe("#getFlickrJSON", function () {
// verify that the getFlickrJSON method exists
it("exists as a public method on flickrFeeder", function () {
expect(typeof flickrFeeder.getFlickrJSON).to.eql('function');
});
// verify that the getFlickrJSON method calls the correct URL
it("makes the correct http call to Flickr's API based on the parameters it's passed", function () {
// use nock
nock('http://api.flickr.com')
.get('/services/feeds/photos_public.gne?format=json&id=someFlickrID')
.reply(200, {'some_key':'some_value'});
flickrFeeder.getFlickrJSON({id: 'someFlickrID'}, function (data) {
expect(data).to.eql({'some_key':'some_value'});
});
});
});
});
|
Run your test
1
2 | cd your_flickr_feeder_directory
mocha
|
See the full example code on Github here.