nextTick,
defineComponent,
onUnmounted,
+ ref,
+ Ref,
} from '@vue/composition-api'
describe('Store Lifespan', () => {
state: () => ({
a: true,
n: 0,
+ aRef: ref(0),
nested: {
foo: 'foo',
a: { b: 'string' },
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()
+ })
})