diff --git a/README.md b/README.md index 08e238048..8bd409305 100644 --- a/README.md +++ b/README.md @@ -1236,7 +1236,7 @@ nock.removeInterceptor(interceptor); A scope emits the following events: -* `emit('request', function(req, interceptor))`; +* `emit('request', function(req, interceptor, body))`; * `emit('replied', function(req, interceptor))`; ## Global no match event diff --git a/lib/request_overrider.js b/lib/request_overrider.js index 94ac73a2f..bd454794b 100644 --- a/lib/request_overrider.js +++ b/lib/request_overrider.js @@ -288,7 +288,7 @@ function RequestOverrider(req, options, interceptors, remove, cb) { interceptor.req = req; req.headers = req.getHeaders ? req.getHeaders() : req._headers; - interceptor.scope.emit('request', req, interceptor); + interceptor.scope.emit('request', req, interceptor, requestBody); if (typeof interceptor.errorMessage !== 'undefined') { interceptor.interceptionCounter++; diff --git a/tests/test_events.js b/tests/test_events.js index 38e70574e..db50253fc 100644 --- a/tests/test_events.js +++ b/tests/test_events.js @@ -2,6 +2,8 @@ var nock = require('../.'); var http = require('http'); +var Buffer = require('buffer').Buffer; +var querystring = require('querystring'); var test = require('tap').test; test('emits request and replied events', function(t) { @@ -22,6 +24,40 @@ test('emits request and replied events', function(t) { http.get('http://eventland/please'); }); +test('emits request and request body', function(t) { + var data = querystring.stringify({ + example: 123, + }); + + var scope = nock('http://eventland') + .post('/please') + .reply(200); + + scope.on('request', function (req, interceptor, body) { + t.equal(req.path, '/please'); + t.equal(interceptor.interceptionCounter, 0); + t.equal(body, data); + scope.on('replied', function (req, interceptor) { + t.equal(req.path, '/please'); + t.equal(interceptor.interceptionCounter, 1); + t.end(); + }); + }); + + var req = http.request({ + hostname: 'eventland', + method: 'POST', + path: '/please', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': Buffer.byteLength(data) + } + }); + + req.write(data); + req.end(); +}); + test('emits no match when no match and no mock', function(t) { nock.emitter.once('no match', function(req) { t.end();