diff --git a/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.js b/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.js index 378fe51a8..0b6e2b9cf 100644 --- a/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.js +++ b/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.js @@ -30,7 +30,6 @@ module.exports = { dispatchEvent: function(eventObj, callback) { // Non-POST requests not supported if (eventObj.httpVerb !== 'POST') { - callback(new Error('httpVerb not supported: ' + eventObj.httpVerb)); return; } @@ -52,13 +51,15 @@ module.exports = { } }; - var requestCallback = function(error, response, body) { - if (response && response.statusCode && response.statusCode >= 200 && response.statusCode < 400 && callback && typeof callback === 'function') { - callback(); + var requestCallback = function(response) { + if (response && response.statusCode && response.statusCode >= 200 && response.statusCode < 400) { + callback(response); } }; var req = (parsedUrl.protocol === 'http:' ? http : https).request(requestOptions, requestCallback); + // Add no-op error listener to prevent this from throwing + req.on('error', function() {}); req.write(dataString); req.end(); return req; diff --git a/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.tests.js b/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.tests.js index 971199040..82ec57ee5 100644 --- a/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.tests.js +++ b/packages/optimizely-sdk/lib/plugins/event_dispatcher/index.node.tests.js @@ -49,13 +49,9 @@ describe('lib/plugins/event_dispatcher/node', function() { httpVerb: 'POST', }; - eventDispatcher.dispatchEvent(eventObj) - .on('response', function(response) { - assert.isTrue(response.statusCode === 200); + eventDispatcher.dispatchEvent(eventObj, function(resp) { + assert.equal(200, resp.statusCode); done(); - }) - .on('error', function(error) { - assert.fail('status code okay', 'status code not okay', ''); }); }); @@ -70,15 +66,15 @@ describe('lib/plugins/event_dispatcher/node', function() { eventDispatcher.dispatchEvent(eventObj, stubCallback.callback) .on('response', function(response) { - done(); sinon.assert.calledOnce(stubCallback.callback); + done(); }) .on('error', function(error) { assert.fail('status code okay', 'status code not okay', ''); }); }); - it('rejects GET httpVerb', function(done) { + it('rejects GET httpVerb', function() { var eventObj = { url: 'https://cdn.com/event', params: { @@ -87,16 +83,22 @@ describe('lib/plugins/event_dispatcher/node', function() { httpVerb: 'GET', }; - var callback = function(err) { - if (err) { - done(); - } else { - done(new Error('expected error not thrown')); - } - }; - + var callback = sinon.spy(); eventDispatcher.dispatchEvent(eventObj, callback); + sinon.assert.notCalled(callback); }); }); + + it('does not throw in the event of an error', function() { + var eventObj = { + url: 'https://example', + params: {}, + httpVerb: 'POST', + }; + + var callback = sinon.spy(); + eventDispatcher.dispatchEvent(eventObj, callback); + sinon.assert.notCalled(callback); + }); }); });