Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/danielroe/zero-vue. Vue bindings for Zero
sync vue zero
Something went wrong. Try again.
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283// @vitest-environment happy-domimport { describe, expect, it } from 'vitest'import { createApp, effectScope } from 'vue'import { mutators, queries, zeroOptions } from '../test/fixture'import { useConnectionState } from './connection'import { useMutation } from './mutation'import { createZeroPlugin } from './plugin'import { useQuery } from './query'
function createTestApp() { const zero = createZeroPlugin(zeroOptions()) const app = createApp({ render: () => null }) app.use(zero) return { app, zero }}
describe('createZeroPlugin', () => { it('provides the composables to the app', () => { const { app, zero } = createTestApp()
app.runWithContext(() => { const scope = effectScope() scope.run(() => { const { data, status } = useQuery(() => queries.table()) expect(data.value).toEqual([]) expect(status.value).not.toBe('disabled') expect(useConnectionState().value).toBeDefined() }) scope.stop() })
zero.dispose() })
it('exposes the bundle directly as well as through injection', () => { const { app, zero } = createTestApp()
expect(zero.useZero().value.userID).toBe('test-user') app.runWithContext(() => { expect(useQuery(() => queries.table()).data.value).toEqual([]) })
zero.dispose() })
it('disposes the composables when the app unmounts', async () => { const { app, zero } = createTestApp()
const instance = zero.useZero().value app.mount(document.createElement('div')) app.unmount() await new Promise(resolve => setTimeout(resolve, 1))
expect(instance.closed).toBe(true) })
it('throws a helpful error when a query getter returns a Zero instance', () => { const { app, zero } = createTestApp()
app.runWithContext(() => { expect(() => useQuery(() => zero.useZero().value as never)).toThrow(/Pass the instance/) })
zero.dispose() })
it('resolves the instance for mutations too', async () => { const { app, zero } = createTestApp()
await app.runWithContext(async () => { const { mutate, pending, error } = useMutation(mutators.table.insert) expect(pending.value).toBe(false) const result = mutate({ a: 1, b: 'one' }) expect(pending.value).toBe(true) await result expect(pending.value).toBe(false) expect(error.value).toBeUndefined() })
zero.dispose() })})