From dab38fec8a0f5e030cadac99b6fbcd6c56eb130c Mon Sep 17 00:00:00 2001 From: Mohamedox Date: Fri, 15 Mar 2019 16:06:51 +0100 Subject: [PATCH 1/7] effect can be async --- src/new.spec.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/new.spec.js b/src/new.spec.js index aabe1ba..e4c435b 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -324,5 +324,22 @@ describe("withStore", () => { }); return effects.myEffect(); }); + + it("can be async", () => { + const { effects, getState } = makeTestInstance({ + initialState: () => ({ qux: "qux " }), + effects: { + async foo() { + await this.effects.bar(); + }, + bar() { + this.state.qux = "fred"; + }, + }, + }); + return expect(effects.foo().then(() => getState().qux)).resolves.toBe( + "fred" + ); + }); }); }); From 20a090081b4defcaa591d2444c5d45b7c5754806 Mon Sep 17 00:00:00 2001 From: Mohamedox Date: Fri, 15 Mar 2019 16:26:52 +0100 Subject: [PATCH 2/7] fix --- src/new.spec.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/new.spec.js b/src/new.spec.js index e4c435b..1105927 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -325,7 +325,7 @@ describe("withStore", () => { return effects.myEffect(); }); - it("can be async", () => { + it("can be async", async () => { const { effects, getState } = makeTestInstance({ initialState: () => ({ qux: "qux " }), effects: { @@ -337,9 +337,8 @@ describe("withStore", () => { }, }, }); - return expect(effects.foo().then(() => getState().qux)).resolves.toBe( - "fred" - ); + await effects.foo(); + expect(getState().qux).toBe("fred"); }); }); }); From d6c9a3d2331447dda81ce0f0d75774ca3490383a Mon Sep 17 00:00:00 2001 From: Mohamedox Date: Fri, 15 Mar 2019 17:19:11 +0100 Subject: [PATCH 3/7] fix --- src/new.spec.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/new.spec.js b/src/new.spec.js index 1105927..d84bd21 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -326,17 +326,22 @@ describe("withStore", () => { }); it("can be async", async () => { + let resolve; + // eslint-disable-next-line promise/param-names + const promise = new Promise(resolve_ => { + resolve = resolve_; + }); const { effects, getState } = makeTestInstance({ - initialState: () => ({ qux: "qux " }), + initialState: () => ({ qux: "qux" }), effects: { async foo() { - await this.effects.bar(); - }, - bar() { + await promise; this.state.qux = "fred"; }, }, }); + + resolve(); await effects.foo(); expect(getState().qux).toBe("fred"); }); From 9e73a3299d56dd5406e525f4b8e3645282f4537d Mon Sep 17 00:00:00 2001 From: Mohamedox Date: Mon, 18 Mar 2019 17:00:28 +0100 Subject: [PATCH 4/7] fix --- src/new.spec.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/new.spec.js b/src/new.spec.js index d84bd21..ae536a3 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -341,8 +341,10 @@ describe("withStore", () => { }, }); + const _promise = effects.foo(); + expect(getState().qux).toBe("qux"); resolve(); - await effects.foo(); + await _promise; expect(getState().qux).toBe("fred"); }); }); From 51b1edd2114d63e7d8293436ba0ffbe8bffc66da Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 18 Mar 2019 18:22:58 +0100 Subject: [PATCH 5/7] Update new.spec.js --- src/new.spec.js | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/new.spec.js b/src/new.spec.js index ae536a3..ca32203 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -328,23 +328,41 @@ describe("withStore", () => { it("can be async", async () => { let resolve; // eslint-disable-next-line promise/param-names - const promise = new Promise(resolve_ => { + let promise = new Promise(resolve_ => { resolve = resolve_; }); const { effects, getState } = makeTestInstance({ - initialState: () => ({ qux: "qux" }), + initialState: () => ({ qux: 0 }), effects: { async foo() { - await promise; - this.state.qux = "fred"; + ++this.state.qux; + + // signal the caller that we have made the first change + resolve(); + + // wait for the caller to make us continue + // + // eslint-disable-next-line promise/param-names + await new Promise(resolve_ => { + resolve = resolve_; + }); + + ++this.state.qux; }, }, }); - const _promise = effects.foo(); - expect(getState().qux).toBe("qux"); + const pFoo = effects.foo(); + + // wait for foo to have done the first change + await promise; + expect(getState().qux).toBe(1); + + // unlock foo resolve(); - await _promise; + + // wait for foo to be finished + await pFoo; expect(getState().qux).toBe("fred"); }); }); From cbb71d52b63ab1332cb3259a80939929cdc34948 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 18 Mar 2019 18:23:12 +0100 Subject: [PATCH 6/7] Update new.spec.js --- src/new.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/new.spec.js b/src/new.spec.js index ca32203..cef193f 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -363,7 +363,7 @@ describe("withStore", () => { // wait for foo to be finished await pFoo; - expect(getState().qux).toBe("fred"); + expect(getState().qux).toBe(2); }); }); }); From 971027df04d1d55c5400a34a4dded561ed9e651a Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Tue, 19 Mar 2019 09:38:22 +0100 Subject: [PATCH 7/7] Update new.spec.js --- src/new.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/new.spec.js b/src/new.spec.js index cef193f..3d20cc3 100644 --- a/src/new.spec.js +++ b/src/new.spec.js @@ -328,7 +328,7 @@ describe("withStore", () => { it("can be async", async () => { let resolve; // eslint-disable-next-line promise/param-names - let promise = new Promise(resolve_ => { + const promise = new Promise(resolve_ => { resolve = resolve_; }); const { effects, getState } = makeTestInstance({