diff --git a/tests/store.test.ts b/tests/store.test.ts
index c49abe03..0b07d704 100644
--- a/tests/store.test.ts
+++ b/tests/store.test.ts
@@ -832,4 +832,76 @@ describe("connecting a component to store", () => {
"
taster:aaronconsumed:jupiler
"
);
});
+
+ test("connected component deeply reactive with undefined, null and string props", async () => {
+ class Beer extends Component {
+ inlineTemplate = `
+ taster:
+ selected:
+ consumed:
+
`;
+ }
+ const ConnectedBeer = connect((state, props) => {
+ return {
+ selected: state.beers[props.id],
+ consumed: state.beers[state.consumedID] || null,
+ taster: state.taster,
+ };
+ })(Beer);
+
+ class App extends Component {
+ inlineTemplate = `
+
+
`;
+ widgets = { ConnectedBeer };
+ state = { beerId: 0 };
+ }
+
+ const mutations = {
+ changeTaster({ state }, newTaster) {
+ state.taster = newTaster;
+ },
+ consume({ state }, beerId) {
+ state.consumedID = beerId;
+ },
+ renameBeer({ state }, { beerId, name }) {
+ state.beers[beerId].name = name;
+ },
+ };
+ const state = {
+ beers: {
+ 1: { name: "jupiler" }
+ },
+ consumedID: null,
+ taster: "aaron"
+ };
+ const store = new Store({ state, mutations });
+ (env).store = store;
+ const app = new App(env);
+
+ await app.mount(fixture);
+ expect(fixture.innerHTML).toBe("");
+
+ await app.updateState({ beerId: 1 });
+ expect(fixture.innerHTML).toBe("taster:aaronselected:jupiler
");
+
+ store.commit("renameBeer", { beerId: 1, name: "kwak" });
+ await nextTick();
+ expect(fixture.innerHTML).toBe("taster:aaronselected:kwak
");
+
+ store.commit("consume", 1);
+ await nextTick();
+ expect(fixture.innerHTML).toBe("taster:aaronselected:kwakconsumed:kwak
");
+
+ await app.updateState({ beerId: 0 });
+ expect(fixture.innerHTML).toBe("taster:aaronconsumed:kwak
");
+
+ store.commit("renameBeer", { beerId: 1, name: "jupiler" });
+ await nextTick();
+ expect(fixture.innerHTML).toBe("taster:aaronconsumed:jupiler
");
+
+ store.commit("changeTaster", "matthieu");
+ await nextTick();
+ expect(fixture.innerHTML).toBe("taster:matthieuconsumed:jupiler
");
+ });
});