Chai Assertions for Nock
Nock Chai extends Chai with a language for asserting facts about Nock .
Instead of manually wiring up your expectations to intercepting a nocked request:
const nockedRequest = nock ( ' http://some-url ' ) ;
nockedRequest . on ( ' request ' , function ( req , interceptor , body ) {
expect ( body ) . to . deep . equal ( { hello : ' world ' } ) ;
} ) ;
you can write code that expresses what you really mean:
return expect ( nock ( ' http://some-url ' ) ) . to . have . been . requestedWith ( {
hello : ' world '
} ) ;
Installation
npm install chai-nock
Then add to your test setup:
const chai = require ( ' chai ' ) ;
const chaiNock = require ( ' chai-nock ' ) ;
chai . use ( chaiNock ) ;
Assertions
requested
Asserts that a request has been made to the nock.
it ( ' requested ' , ( ) => {
const requestNock = nock ( ' http://bbc.co.uk ' )
. get ( ' / ' )
. reply ( 200 ) ;
request ( {
uri : ' http://bbc.co.uk ' ,
} ) ;
return expect ( requestNock ) . to . have . been . requested ;
} ) ;
requestedWith(body)
Asserts that a request has been made to the nock with a body that exactly matches the object provided.
it ( ' requestedWith ' , ( ) => {
const requestNock = nock ( ' http://bbc.co.uk ' )
. get ( ' / ' )
. reply ( 200 ) ;
request ( {
json : true ,
uri : ' http://bbc.co.uk ' ,
body : {
hello : ' world '
}
} ) ;
return expect ( requestNock ) . to . have . been . requestedWith ( { hello : ' world ' } ) ;
} ) ;
requestedWithHeaders(headers)
Asserts that a request has been made to the nock with headers that exactly match the object provided.
it ( ' requestedWithHeaders ' , ( ) => {
const requestNock = nock ( ' http://bbc.co.uk ' )
. get ( ' / ' )
. reply ( 200 ) ;
request ( {
json : true ,
uri : ' http://bbc.co.uk ' ,
headers : {
myHeader : ' myHeaderValue '
}
} ) ;
return expect ( requestNock ) . to . have . been . requestedWithHeaders ( {
host : ' bbc.co.uk ' ,
accept : ' application/json ' ,
myHeader : ' myHeaderValue '
} ) ;
} ) ;
requestedWithHeadersMatch(partialHeaders)
Asserts that a request has been made to the nock with headers that contain the key/value pairs in the object provided.
it ( ' requestedWithHeadersMatch ' , ( ) => {
const requestNock = nock ( ' http://bbc.co.uk ' )
. get ( ' / ' )
. reply ( 200 ) ;
request ( {
json : true ,
uri : ' http://bbc.co.uk ' ,
headers : {
myHeader : ' myHeaderValue ' ,
otherHeader : ' otherHeaderValue '
}
} ) ;
return expect ( requestNock ) . to . have . been . requestedWithHeadersMatch ( {
myHeader : ' myHeaderValue '
} ) ;
} ) ;
Setting a Timeout
By default, a timeout of 2 seconds is applied to assertions on nock requests. This means that if nock has not intercepted the request within the set time, the assertion will be false
You can set a custom global timeout by calling setTimeout
on the chaiNock
object:
const chaiNock = require ( ' chai-nock ' ) ;
chai . use ( chaiNock ) ;
chaiNock . setTimeout ( 10000 ) ;
WARNING: If not set already, the test timeout must be greater than that of chaiNock!
Usage
const { expect } = require ( ' chai ' ) ;
const nock = require ( ' nock ' ) ;
const request = require ( ' request-promise-native ' ) ;
describe ( ' example ' , ( ) => {
it ( ' test ' , ( ) => {
const requestNock = nock ( ' http://bbc.co.uk ' )
. get ( ' / ' )
. reply ( 200 ) ;
request ( {
json : true ,
uri : ' http://bbc.co.uk ' ,
body : {
hello : ' world '
}
} ) ;
return expect ( requestNock ) . to . have . been . requestedWith ( { hello : ' world ' } ) ;
} ) ;
} ) ;