Skip to content

Commit 648a246

Browse files
committed
Merge pull request #123 from kurumpa/patch-2
Always exit out of console.group when an action throws an error.
2 parents b3badd8 + f74b4ba commit 648a246

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

src/reactor.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,17 @@ class Reactor {
248248
// let each core handle the message
249249
this.__stores.forEach((store, id) => {
250250
var currState = state.get(id)
251-
var newState = store.handle(currState, actionType, payload)
251+
var newState
252+
var dispatchError
252253

253-
if (this.debug && newState === undefined) {
254-
var error = 'Store handler must return a value, did you forget a return statement'
254+
try {
255+
newState = store.handle(currState, actionType, payload)
256+
} catch(e) {
257+
dispatchError = e
258+
}
259+
260+
if (this.debug && (newState === undefined || dispatchError)) {
261+
var error = dispatchError || 'Store handler must return a value, did you forget a return statement'
255262
logging.dispatchError(error)
256263
throw new Error(error)
257264
}

tests/reactor-tests.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var List = require('immutable').List
44
var Reactor = require('../src/main').Reactor
55
var Store = require('../src/main').Store
66
var toImmutable = require('../src/immutable-helpers').toImmutable
7+
var logging = require('../src/logging')
78

89

910
describe('Reactor', () => {
@@ -451,6 +452,40 @@ describe('Reactor', () => {
451452
})
452453
})
453454

455+
describe('when debug is true and a store has a handler for an action but throws', () => {
456+
var reactor
457+
458+
beforeEach(() => {
459+
spyOn(logging, 'dispatchError')
460+
var throwingStore = new Store({
461+
getInitialState() {
462+
return 1
463+
},
464+
initialize() {
465+
this.on('set', (_, val) => {throw new Error('Error during action handling')})
466+
},
467+
})
468+
469+
reactor = new Reactor({
470+
debug: true,
471+
})
472+
reactor.registerStores({
473+
test: throwingStore,
474+
})
475+
})
476+
477+
afterEach(() => {
478+
reactor.reset()
479+
})
480+
481+
it('should log and throw an error', function() {
482+
expect(function() {
483+
reactor.dispatch('set', 'foo')
484+
}).toThrow()
485+
expect(logging.dispatchError).toHaveBeenCalled()
486+
})
487+
})
488+
454489
describe('#registerStores', () => {
455490
var reactor
456491

0 commit comments

Comments
 (0)