From: Eduardo San Martin Morote Date: Mon, 8 May 2023 16:40:01 +0000 (+0200) Subject: feat(testing): restoreGetters function X-Git-Tag: @pinia/nuxt@0.4.11~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7be0d0545cc8b3736793b0f55b7ab1edf84f7824;p=thirdparty%2Fvuejs%2Fpinia.git feat(testing): restoreGetters function --- diff --git a/packages/testing/src/restoreGetters.spec.ts b/packages/testing/src/restoreGetters.spec.ts new file mode 100644 index 00000000..f3de1ced --- /dev/null +++ b/packages/testing/src/restoreGetters.spec.ts @@ -0,0 +1,48 @@ +import { defineStore } from 'pinia' +import { computed, ref } from 'vue' +import { describe, expect, it } from 'vitest' +import { createTestingPinia } from './testing' +import { restoreGetter } from './restoreGetters' + +describe('restoreGetters', () => { + it('allows overriding getters', () => { + const useStore = defineStore('lol', { + state: () => ({ n: 0 }), + getters: { + double: (state) => state.n * 2, + }, + }) + const pinia = createTestingPinia() + const store = useStore(pinia) + + store.double = 3 + expect(store.double).toBe(3) + restoreGetter(store, 'double') + expect(store.double).toBe(0) + }) + + tds(() => { + const s1 = defineStore('s1', () => { + const n = ref(0) + const double = computed(() => n.value * 2) + return { n, double } + })() + + const s2 = defineStore('s2', { + state: () => ({ n: 0 }), + getters: { + double: (state) => state.n * 2, + }, + })() + + restoreGetter(s1, 'double') + restoreGetter(s2, 'double') + + // @ts-expect-error: not a getter + restoreGetter(s1, 'n') + // @ts-expect-error: not a getter + restoreGetter(s2, 'n') + }) +}) + +function tds(_fn: Function) {} diff --git a/packages/testing/src/restoreGetters.ts b/packages/testing/src/restoreGetters.ts new file mode 100644 index 00000000..ed6ed532 --- /dev/null +++ b/packages/testing/src/restoreGetters.ts @@ -0,0 +1,38 @@ +import { + Store, + StateTree, + _ExtractGettersFromSetupStore_Keys, + defineStore, +} from 'pinia' +import { ref, computed } from 'vue-demi' + +export function restoreGetter( + store: Store, + getter: keyof G +): void +export function restoreGetter( + store: SS, + getter: _ExtractGettersFromSetupStore_Keys +): void +export function restoreGetter(store: Store, getter: any): void { + // @ts-expect-error: private api + store[getter] = undefined +} + +function tds() { + const s1 = defineStore('s1', () => { + const n = ref(0) + const double = computed(() => n.value * 2) + return { n, double } + })() + + const s2 = defineStore('s2', { + state: () => ({ n: 0 }), + getters: { + double: (state) => state.n * 2, + }, + })() + + restoreGetter(s1, 'double') + restoreGetter(s2, 'double') +}