]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
test: lifespan with ref
authorEduardo San Martin Morote <posva13@gmail.com>
Wed, 12 May 2021 12:19:08 +0000 (14:19 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Thu, 13 May 2021 11:21:13 +0000 (13:21 +0200)
__tests__/lifespan.spec.ts

index 572ea4fbc0d4e1c59e8cdc676202bb478145130c..36ae2ef8a48c955f05b35de7862e39eb01504a84 100644 (file)
@@ -5,6 +5,8 @@ import VueCompositionAPI, {
   nextTick,
   defineComponent,
   onUnmounted,
+  ref,
+  Ref,
 } from '@vue/composition-api'
 
 describe('Store Lifespan', () => {
@@ -14,6 +16,7 @@ describe('Store Lifespan', () => {
       state: () => ({
         a: true,
         n: 0,
+        aRef: ref(0),
         nested: {
           foo: 'foo',
           a: { b: 'string' },
@@ -103,4 +106,54 @@ describe('Store Lifespan', () => {
     await nextTick()
     expect(inComponentWatch).toHaveBeenCalledTimes(2)
   })
+
+  it('ref in state reactivity outlives component life', async () => {
+    let n: Ref<number>
+    const globalWatch = jest.fn()
+    const destroy = watch(() => pinia.state.value.a?.n, globalWatch)
+
+    const useStore = defineStore({
+      id: 'a',
+      state: () => {
+        n = n || ref(0)
+        return { n }
+      },
+    })
+
+    const Component = defineComponent({
+      // @ts-expect-error
+      render: () => null,
+      setup() {
+        const store = useStore()
+        store.n++
+      },
+    })
+
+    const options = {
+      pinia,
+      localVue,
+    }
+
+    let wrapper = mount(Component, options)
+    await wrapper.destroy()
+
+    expect(globalWatch).toHaveBeenCalledTimes(1)
+
+    let store = useStore()
+    store.n++
+    await nextTick()
+    expect(globalWatch).toHaveBeenCalledTimes(2)
+
+    wrapper = mount(Component, options)
+    await wrapper.destroy()
+
+    expect(globalWatch).toHaveBeenCalledTimes(3)
+
+    store = useStore()
+    store.n++
+    await nextTick()
+    expect(globalWatch).toHaveBeenCalledTimes(4)
+
+    destroy()
+  })
 })