From d57d69a98d7eab0048925db59ea673a019738e84 Mon Sep 17 00:00:00 2001 From: Yoshua Wuyts Date: Tue, 10 Jan 2017 18:42:51 +0100 Subject: [PATCH] feature(hooks): log initial state (#69) --- index.js | 3 +++ test.js | 40 +++++++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/index.js b/index.js index 74a6a9b..ec7ebb1 100644 --- a/index.js +++ b/index.js @@ -158,6 +158,9 @@ function dispatcher (hooks) { // state rather than indvidual chunks, so we apply it outside the loop if (!stateCalled && opts.state !== false) { _state = wrapHook(_state, initialStateWraps) + if (onStateChangeHooks.length) { + applyHook(onStateChangeHooks, _state, {}, {}, 'init', createSend) + } } if (!opts.noSubscriptions) subsCalled = true diff --git a/test.js b/test.js index fecdeb2..6cfb50b 100644 --- a/test.js +++ b/test.js @@ -490,13 +490,19 @@ tape('handlers: subscriptions', (t) => { tape('hooks: onStateChange', (t) => { t.test('should be called whenever state changes', (t) => { - t.plan(4) + t.plan(5) + var called = false const store = barracks({ onStateChange: (state, data, prev, caller, createSend) => { - t.deepEqual(data, { count: 3 }, 'action is equal') - t.deepEqual(state, { count: 4 }, 'state is equal') - t.deepEqual(prev, { count: 1 }, 'prev is equal') - t.equal(caller, 'increment', 'caller is equal') + if (!called) { + t.deepEqual(state, { count: 1 }, 'state is equal on first try') + called = true + } else { + t.deepEqual(data, { count: 3 }, 'action is equal') + t.deepEqual(state, { count: 4 }, 'state is equal') + t.deepEqual(prev, { count: 1 }, 'prev is equal') + t.equal(caller, 'increment', 'caller is equal') + } } }) @@ -513,12 +519,19 @@ tape('hooks: onStateChange', (t) => { }) t.test('should allow triggering other actions', (t) => { - t.plan(2) + t.plan(4) + var called = false const store = barracks({ onStateChange: function (state, data, prev, caller, createSend) { - t.pass('onStateChange called') - const send = createSend('test:onStateChange', true) - send('foo') + if (!called) { + t.pass('onStateChange called') + t.equal(caller, 'init', "caller was 'init'") + called = true + } else { + t.pass('onStateChange called') + const send = createSend('test:onStateChange', true) + send('foo') + } } }) @@ -542,10 +555,15 @@ tape('hooks: onStateChange', (t) => { t.test('previous state should not be mutated', (t) => { t.plan(2) + var initialized = false const storeNS = barracks({ onStateChange: (state, data, prev, caller, createSend) => { - t.equal(state.ns.items.length, 3, 'state was updated') - t.equal(prev.ns.items.length, 0, 'prev was left as-is') + if (!initialized) { + initialized = true + } else { + t.equal(state.ns.items.length, 3, 'state was updated') + t.equal(prev.ns.items.length, 0, 'prev was left as-is') + } } })