]> 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>
Wed, 12 May 2021 12:19:08 +0000 (14:19 +0200)
__tests__/lifespan.spec.ts

index aef85fb747916f9c48d631abf0b211dfd3c6908d..1ab83bd58d260c78ad4fe8245c17482afe6a51c5 100644 (file)
@@ -1,6 +1,6 @@
-import { createPinia, defineStore } from '../src'
+import { createPinia, defineStore, setActivePinia } from '../src'
 import { mount } from '@vue/test-utils'
-import { watch, nextTick, defineComponent } from 'vue'
+import { watch, nextTick, defineComponent, ref, Ref } from 'vue'
 
 describe('Store Lifespan', () => {
   function defineMyStore() {
@@ -9,6 +9,7 @@ describe('Store Lifespan', () => {
       state: () => ({
         a: true,
         n: 0,
+        aRef: ref(0),
         nested: {
           foo: 'foo',
           a: { b: 'string' },
@@ -68,4 +69,56 @@ describe('Store Lifespan', () => {
     await nextTick()
     expect(inComponentWatch).toHaveBeenCalledTimes(2)
   })
+
+  it('ref in state reactivity outlives component life', async () => {
+    let n: Ref<number>
+    const pinia = createPinia()
+    setActivePinia(pinia)
+    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({
+      render: () => null,
+      setup() {
+        const store = useStore()
+        store.n++
+      },
+    })
+
+    const options = {
+      global: {
+        plugins: [pinia],
+      },
+    }
+
+    let wrapper = mount(Component, options)
+    await wrapper.unmount()
+
+    expect(globalWatch).toHaveBeenCalledTimes(1)
+
+    let store = useStore()
+    store.n++
+    await nextTick()
+    expect(globalWatch).toHaveBeenCalledTimes(2)
+
+    wrapper = mount(Component, options)
+    await wrapper.unmount()
+
+    expect(globalWatch).toHaveBeenCalledTimes(3)
+
+    store = useStore()
+    store.n++
+    await nextTick()
+    expect(globalWatch).toHaveBeenCalledTimes(4)
+
+    destroy()
+  })
 })