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.