Skip to content

Commit

Permalink
feat(testing): restoreGetters function
Browse files Browse the repository at this point in the history
  • Loading branch information
posva committed May 8, 2023
1 parent 3092a31 commit 7be0d05
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
48 changes: 48 additions & 0 deletions packages/testing/src/restoreGetters.spec.ts
Original file line number Diff line number Diff line change
@@ -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) {}
38 changes: 38 additions & 0 deletions packages/testing/src/restoreGetters.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import {
Store,
StateTree,
_ExtractGettersFromSetupStore_Keys,
defineStore,
} from 'pinia'
import { ref, computed } from 'vue-demi'

export function restoreGetter<G>(
store: Store<string, StateTree, G, any>,
getter: keyof G
): void
export function restoreGetter<SS>(
store: SS,
getter: _ExtractGettersFromSetupStore_Keys<SS>
): void
export function restoreGetter<G>(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')
}

0 comments on commit 7be0d05

Please sign in to comment.