diff --git a/src/store/connected_component.ts b/src/store/connected_component.ts index 8b4a2e30..d4a99163 100644 --- a/src/store/connected_component.ts +++ b/src/store/connected_component.ts @@ -39,9 +39,8 @@ export class ConnectedComponent extends Component return {}; } - dispatch() { - const [name, ...payload] = arguments; - (this.__owl__ as any).store.dispatch(name, ...payload); + dispatch(name, ...payload) { + return (this.__owl__ as any).store.dispatch(name, ...payload); } /** diff --git a/tests/store/connected_component.test.ts b/tests/store/connected_component.test.ts index 3ff81f89..39c41f24 100644 --- a/tests/store/connected_component.test.ts +++ b/tests/store/connected_component.test.ts @@ -1053,4 +1053,44 @@ describe("connected components and default values", () => { expect(fixture.innerHTML).toBe("
"); expect(steps).toEqual(["on:update", "off:update"]); }); + + test("dispatch an action", async () => { + env.qweb.addTemplates(` + +
+ +
+
+ `); + + class App extends ConnectedComponent { + static mapStoreToProps = function(state) { + return { + counter: state.counter + }; + }; + } + + const state = { + counter: 0 + }; + + const actions = { + inc({ state }) { + return ++state.counter; + } + }; + + const store = new Store({ state, actions }); + (env).store = store; + const app = new App(env); + + await app.mount(fixture); + expect(fixture.innerHTML).toBe("
0
"); + + const res = app.dispatch('inc'); + expect(res).toBe(1); + await nextTick(); + expect(fixture.innerHTML).toBe("
1
"); + }); });