A recent update to Nock meant that partial matches of the request body would no longer match (one dev’s bug is another’s feature).
Their recommended solution is to supply a predicate, and do the check yourself. That’s simple when just checking one property, but I didn’t really want to re-invent the wheel.
Seeing as I’m already using sinon, that seemed like the obvious solution:
var expected = {a: 1};
nock("https://foo.com")
.post("/bar", checkReqBody(expected))
.reply(200, '{}');
function checkReqBody(expected) {
return reqBody => {
expect(reqBody).to.equal(sinon.match(expected));
return true;
};
}
This works fine in the success case; but if the match fails, throwing an error in that callback tears down the test runner process, rather than failing the test.
A bit of digging in the sinon (and sinon-chai) source revealed the right method to call:
return reqBody => {
return sinon.match(expected).test(reqBody);
};
This is now equivalent to the previous behaviour, if the match fails you get the generic nock error. I wanted to make more use of the sinon output, when the match failed, but never really got anywhere with it.