Skip to content

Commit cb86145

Browse files
authored
dataCallback, shouldSendCallback are passed prior callback as 2nd arg (#636)
1 parent fbf1d1b commit cb86145

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

src/raven.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,10 @@ Raven.prototype = {
451451
* @return {Raven}
452452
*/
453453
setDataCallback: function(callback) {
454-
this._globalOptions.dataCallback = callback;
454+
var original = this._globalOptions.dataCallback;
455+
this._globalOptions.dataCallback = isFunction(callback)
456+
? function (data) { return callback(data, original); }
457+
: callback;
455458

456459
return this;
457460
},
@@ -464,7 +467,10 @@ Raven.prototype = {
464467
* @return {Raven}
465468
*/
466469
setShouldSendCallback: function(callback) {
467-
this._globalOptions.shouldSendCallback = callback;
470+
var original = this._globalOptions.shouldSendCallback;
471+
this._globalOptions.shouldSendCallback = isFunction(callback)
472+
? function (data) { return callback(data, original); }
473+
: callback;
468474

469475
return this;
470476
},

test/raven.test.js

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,9 +1774,14 @@ describe('Raven (public API)', function() {
17741774

17751775
describe('.setDataCallback', function() {
17761776
it('should set the globalOptions.dataCallback attribute', function() {
1777-
var foo = function(){};
1777+
var foo = sinon.stub();
17781778
Raven.setDataCallback(foo);
1779-
assert.equal(Raven._globalOptions.dataCallback, foo);
1779+
1780+
// note that setDataCallback creates a callback/closure around
1781+
// foo, so can't test for equality - just verify that calling the wrapper
1782+
// also calls foo
1783+
Raven._globalOptions.dataCallback();
1784+
assert.isTrue(foo.calledOnce);
17801785
});
17811786

17821787
it('should clear globalOptions.dataCallback with no arguments', function() {
@@ -1785,13 +1790,33 @@ describe('Raven (public API)', function() {
17851790
Raven.setDataCallback();
17861791
assert.isUndefined(Raven._globalOptions.dataCallback);
17871792
});
1793+
1794+
it('should generate a wrapper that passes the prior callback as the 2nd argument', function () {
1795+
var foo = sinon.stub();
1796+
var bar = sinon.spy(function(data, orig) {
1797+
assert.equal(orig, foo);
1798+
foo();
1799+
});
1800+
Raven._globalOptions.dataCallback = foo;
1801+
Raven.setDataCallback(bar);
1802+
Raven._globalOptions.dataCallback({
1803+
'a': 1 // "data"
1804+
});
1805+
assert.isTrue(bar.calledOnce);
1806+
assert.isTrue(foo.calledOnce);
1807+
});
17881808
});
17891809

17901810
describe('.setShouldSendCallback', function() {
17911811
it('should set the globalOptions.shouldSendCallback attribute', function() {
1792-
var foo = function(){};
1812+
var foo = sinon.stub();
17931813
Raven.setShouldSendCallback(foo);
1794-
assert.equal(Raven._globalOptions.shouldSendCallback, foo);
1814+
1815+
// note that setShouldSendCallback creates a callback/closure around
1816+
// foo, so can't test for equality - just verify that calling the wrapper
1817+
// also calls foo
1818+
Raven._globalOptions.shouldSendCallback();
1819+
assert.isTrue(foo.calledOnce);
17951820
});
17961821

17971822
it('should clear globalOptions.shouldSendCallback with no arguments', function() {
@@ -1800,6 +1825,21 @@ describe('Raven (public API)', function() {
18001825
Raven.setShouldSendCallback();
18011826
assert.isUndefined(Raven._globalOptions.shouldSendCallback);
18021827
});
1828+
1829+
it('should generate a wrapper that passes the prior callback as the 2nd argument', function () {
1830+
var foo = sinon.stub();
1831+
var bar = sinon.spy(function(data, orig) {
1832+
assert.equal(orig, foo);
1833+
foo();
1834+
});
1835+
Raven._globalOptions.shouldSendCallback = foo;
1836+
Raven.setShouldSendCallback(bar);
1837+
Raven._globalOptions.shouldSendCallback({
1838+
'a': 1 // "data"
1839+
});
1840+
assert.isTrue(bar.calledOnce);
1841+
assert.isTrue(foo.calledOnce);
1842+
});
18031843
});
18041844

18051845
describe('.captureMessage', function() {

0 commit comments

Comments
 (0)