nockoff
v0.0.3
Published
An extensible request hijacker for mocking URLs in tests. Use it to simplify your testing against external APIs.
Downloads
6
Readme
nockoff
An extensible request hijacker for mocking URLs in tests. Use it to simplify your testing against external APIs.
Installation
nockoff
will be used internally in your test suite, so save it to your package.json.
npm install nockoff -s
Usage
nockoff
lets you mock calls to external URLs through Node's http and https requests method. You represent the parts of the request you wish to assert were called and return the response you require.
nockoff('abc.com')
.presentAndEqual( { query: { one: 1 } } )
.respond( { header: { 'code': 200 }, body: require('./stock-market-fixture.json') } );
http.request('abc.com/?search=todays+stock+prices', function(err, res) {
console.log(')
});
Concepts
nockoff
is pretty simple. The central concept is matchers
. You can use the default matchers we provide (see presentAndEqual
above, there are more coming) or write your own; either to use across tests or inline.
Inline Matchers
Reusable Matchers
A reusable matcher is created by writing a function that takes two arguments
nockoff.addMatcher('simpleMatch', simpleMatcher);
nockoff("foo.com") .mustLogOut( { query: { logout: true } } ) .respond( { header: { 'code': 200 }, body: '{ two: 2 }' } );
http.request("http://abc.com/?logout=true", function(res) { expect(called).to.be.ok; done(); });
### Writing your own matcher.
Matchers JS modules that support a 'match' function
```js
var knockOff = require('knock-off');
var simpleMatcher = Object.create({}, knockOff.Matcher);
simpleMatcher.match = function(matchBody) {
var errStr = '';
if (Object.keys(matchBody.query).length == 0) { //assert that there are query parameters
errStr = 'Query parameters are missing.';
}
return errStr;
};
var knockOff = require('knock-off');
knockOff.addMatcher(function(matchBody) { return str; }); //only lasts for the duration of the current knock off call
knockOff.Matchers.add(function(matchBody) {
//matching logic
return str;
}); //this matcher is available everywhere the knockOff module is used
Contributors
Written at News Ltd as a replacement for nock.
- @nicholasf
- @cgiffard
- @indieasaconcept