Skip to content

Testing Utilities

The /testing entry point packages the patterns this package's own test suite uses everywhere — no test-runner-specific import (works with Vitest, Jest, or anything else, since it just reassigns a plain object property, not vi.spyOn).

ts
import {
  mockStorage,
  resetStorageState,
  seedExpiredEnvelope,
  flushAsync,
} from 'vue-storage-kit/testing'
import { useStorage } from 'vue-storage-kit'

beforeEach(() => {
  resetStorageState() // clears the shared instance/engine cache between tests
})

it('reads an existing value', async () => {
  const { adapter, restore } = mockStorage() // redirects every target to one MemoryStorageAdapter
  await adapter.setItem('k', JSON.stringify({ v: 1, d: '"stored"', exp: null, ts: Date.now() }))

  const { value } = useStorage('k', { defaultValue: 'default', target: 'memory' })
  await flushAsync()

  expect(value.value).toBe('stored')
  restore()
})

it('treats an expired key as expired', async () => {
  const { adapter } = mockStorage()
  await seedExpiredEnvelope(adapter, 'k', 'stale') // shorthand for the envelope above, with exp in the past

  const { value } = useStorage('k', { defaultValue: 'default', target: 'memory' })
  await flushAsync()

  expect(value.value).toBe('default')
})

Exports

mockStorage

(adapter?: StorageAdapter) => { adapter, restore() }

Redirects StorageAdapterFactory.get() to always return adapter (a fresh MemoryStorageAdapter by default), regardless of the requested target.

resetStorageState

() => void

Clears the shared useStorage()/engine instance cache (Vue and React alike) and StorageAdapterFactory's per-target singletons.

seedEnvelope

(adapter, key, value, opts?) => Promise<void>

Writes a raw envelope directly, for arranging state without a live useStorage() instance.

seedExpiredEnvelope

(adapter, key, value, opts?) => Promise<void>

seedEnvelope() with exp defaulted to a timestamp already in the past.

flushAsync

(ms?: number) => Promise<void>

await-able delay (default 10ms) for letting pending writes/debounce/throttle/dynamic imports settle.

MemoryStorageAdapter, StorageAdapterFactory

Re-exported for convenience.