Registry / testing / vitest-drizzle-mock

vitest-drizzle-mock

JSON →
library0.6.0jsnpmunverified

Mock drizzle-orm database instances for fast, in-memory unit testing with Vitest. No database required. v0.6.0 supports all drizzle drivers (PostgreSQL, MySQL, SQLite) and provides a MockController API with onSelect, onInsert, onUpdate, onDelete operations. Actively maintained. Key differentiator: tight integration with drizzle's mock method, full column autocomplete, and subset matching for values.

npm install vitest-drizzle-mock
INSTALL
IMPORT
SIG · VITEST-DRIZZLE-MOC
V
vitest-drizzle-mock
testingjavascriptv0.6.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

mockDatabase
import { mockDatabase } from 'vitest-drizzle-mock'
import { mockDatabase } from 'drizzle-orm'
Named export from the package. Not a drizzle-orm export.
MockController
import { MockController } from 'vitest-drizzle-mock'
import MockController from 'vitest-drizzle-mock'
TypeScript type export. Use named import for type.
drizzle.mock
import { drizzle } from 'drizzle-orm/node-postgres'; const db = drizzle.mock({ schema })
import { mockDatabase } from 'vitest-drizzle-mock'; const db = mockDatabase(schema)
drizzle.mock() comes from drizzle-orm, not from vitest-drizzle-mock.

Complete Vitest test setup demonstrating mocking select, insert, and update operations on drizzle-orm with vitest-drizzle-mock.

import { describe, it, expect, beforeEach } from 'vitest'; import { eq } from 'drizzle-orm'; import { drizzle } from 'drizzle-orm/node-postgres'; import { mockDatabase, MockController } from 'vitest-drizzle-mock'; import * as schema from './schema'; describe('user service', () => { let db: ReturnType<typeof drizzle.mock<typeof schema>>; let mock: MockController<typeof db>; beforeEach(() => { db = drizzle.mock({ schema }); mock = mockDatabase(db); }); it('should find a user by id', async () => { mock.onSelect(schema.users).respond([ { id: 1, name: 'Alice', email: 'alice@test.com' }, ]); const result = await db .select() .from(schema.users) .where(eq(schema.users.id, 1)); expect(result).toEqual([ { id: 1, name: 'Alice', email: 'alice@test.com' }, ]); }); it('should create a user', async () => { mock .onInsert(schema.users) .values({ name: 'x', email: 'x' }) .respond([{ id: 2, name: 'Bob', email: 'bob@test.com' }]); const result = await db .insert(schema.users) .values({ name: 'Bob', email: 'bob@test.com' }) .returning(); expect(result).toEqual([ { id: 2, name: 'Bob', email: 'bob@test.com' }, ]); }); it('should update a user', async () => { mock .onUpdate(schema.users) .set({ name: 'x' }) .respond({ rowCount: 1 }); const result = await db .update(schema.users) .set({ name: 'Alice Updated' }) .where(eq(schema.users.id, 1)); expect(result).toEqual({ rowCount: 1 }); }); });
Debug
Known issues
gotchaRequires drizzle-orm >=0.36.0; may not work with older versions
fix
Upgrade drizzle-orm to version 0.36.0 or later
affects: <0.36.0
gotchaDrizzle mock instance must be created with drizzle.mock({ schema }) before passing to mockDatabase
fix
Use drizzle.mock() from drizzle-orm, not vitest-drizzle-mock
affects: all
gotchaonInsert values matching uses subset logic: mock values must be a subset of query values, not superset
fix
Ensure mocked values are a subset of the actual insert values; specify only the columns you want to constrain
affects: all
gotchaMockController type depends on the drizzle instance type; improper generic typing can cause TypeScript errors
fix
Use MockController<typeof db> with the exact type of your drizzle instance
affects: all
Errors
Common errors & fixes
TypeError: drizzle.mock is not a function
Using vitest-drizzle-mock without creating a drizzle mock instance first
fix
Install drizzle-orm, then create db = drizzle.mock({ schema })
Module 'vitest-drizzle-mock' has no exported member 'mockDatabase'
Incorrect import: trying to import from wrong package (e.g., drizzle-orm) or using default import
fix
Use import { mockDatabase } from 'vitest-drizzle-mock'
Argument of type 'MockController<...>' is not assignable to parameter of type 'MockController<...>'
Type mismatch due to incorrect generic parameter or schema
fix
Ensure the mock type matches the drizzle instance type: MockController<typeof db>
Upgrade
Version history
0.6.0latest on npm
Audit
Dependencies
drizzle-ormrequiredPeer dependency required for typing and compatibility with drizzle mock instances
Agent activity
11 hits · last 30 days
node
10
Resources
vitest-drizzle-mock — npm install vitest-drizzle-mock · libregistry