From 8d296cf08dc8986d9de440be0cc06484002d6906 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Wed, 25 Sep 2019 17:09:35 +0200 Subject: [PATCH] fix(core): update --- test/test.ts | 9 ++++++++- ts/smartstate.classes.statepart.ts | 7 ++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/test/test.ts b/test/test.ts index dfa11b0..921c74b 100644 --- a/test/test.ts +++ b/test/test.ts @@ -36,14 +36,21 @@ tap.test('should select something', async () => { }); }); -tap.test('should dispatch a state action', async () => { +tap.test('should dispatch a state action', async (tools) => { + const done = tools.defer(); const addFavourite = testStatePart.createAction(async (statePart, payload) => { const currentState = statePart.getState(); currentState.currentFavorites.push(payload); return currentState; }); + testStatePart.waitUntilPresent(state => { + return state.currentFavorites[0]; + }).then(() => { + done.resolve(); + }); await testStatePart.dispatchAction(addFavourite, 'my favourite things'); expect(testStatePart.getState().currentFavorites).to.include('my favourite things'); + await done.promise; }); tap.start(); diff --git a/ts/smartstate.classes.statepart.ts b/ts/smartstate.classes.statepart.ts index e1f339f..eb3187d 100644 --- a/ts/smartstate.classes.statepart.ts +++ b/ts/smartstate.classes.statepart.ts @@ -83,12 +83,13 @@ export class StatePart { public async waitUntilPresent(selectorFn?: (state: TStatePayload) => T): Promise { const done = plugins.smartpromise.defer(); const selectedObservable = this.select(selectorFn); - const subscription = selectedObservable.subscribe(value => { + const subscription = selectedObservable.subscribe(async value => { if (value) { - subscription.unsubscribe(); done.resolve(value); } }); - return await done.promise; + const result = await done.promise; + subscription.unsubscribe(); + return result; } }