A comprehensive mock of the Prisma API intended for unit testing. All data is stored in memory, providing fast and reliable test execution without external dependencies.
The library uses jest-mock-extended or vitest-mock-extended, which means that if functionality you need is not implemented yet, you can mock it yourself.
npm install prisma-mock --save-dev
# or
yarn add prisma-mock --devSimple example of how to create a prisma mock instance:
import createPrismaMock from "prisma-mock"
let client
beforeEach(() => {
client = createPrismaMock()
})Example of how to mock a global prisma instance, as the default export in a "db" directory (like BlitzJS):
import createPrismaMock from "prisma-mock"
import { mockDeep, mockReset } from "jest-mock-extended"
jest.mock("db", () => ({
__esModule: true,
...jest.requireActual("db"),
default: mockDeep(),
}))
import db, { Prisma } from "db"
beforeEach(() => {
mockReset(db)
createPrismaMock({}, Prisma.dmmf.datamodel)
})You can optionally start with pre-filled data:
const client = createPrismaMock({
user: [
{
id: 1,
name: "John Doe",
accountId: 1,
},
],
account: [
{
id: 1,
name: "Company",
},
],
})createPrismaMock(
data: PrismaMockData<P> = {},
datamodel?: Prisma.DMMF.Datamodel,
client = mockDeep<P>(),
options: {
caseInsensitive?: boolean
enableIndexes?: boolean
} = {}
): Promise<P>Initial mock data for the Prisma models. An object containing keys for tables and values as arrays of objects.
The Prisma datamodel, typically Prisma.dmmf.datamodel. Defaults to the current Prisma client's datamodel.
A jest-mock-extended instance. If not provided, a new instance is created.
Configuration options for the mock client:
caseInsensitive(boolean, default:false): If true, all string comparisons are case insensitiveenableIndexes(boolean, default:false) Experimental: If true, enables indexing for better query performance on primary keys, unique fields, and foreign keys
Returns a mock Prisma client with all standard model methods plus:
$getInternalState(): Method to access the internal data state for testing/debugging
findUnique/findUniqueOrThrowfindManyfindFirst/findFirstOrThrowcreatecreateManydeleteupdatedeleteManyupdateManyupsertcountaggregate
distinctincludewhereselectorderByselect: _count
createcreateManyupdateupdateManydeletedeleteManyconnectdisconnectsetupsert
equalsgt,gte,lt,ltenotin,notIncontains,startsWith,endsWithAND,OR,NOTmode(for case-insensitive matching)
someeverynone
incrementdecrementmultiplydivideset
pathstring_containsstring_starts_withstring_ends_witharray_containsarray_starts_witharray_ends_with
@@id(Primary keys)@default(Default values)@unique(Unique constraints)@@unique(Compound unique constraints)@relation(Relationships)@updatedAt(Partially supported - set at creation)
autoincrement()cuid()uuid()now()
onDelete: SetNullonDelete: Cascade
$transaction(Array of promises)$transaction(Interactive transactions with rollback)$connect$disconnect
The following features are planned but not yet implemented:
groupBy
connectOrCreate
search(Full-text search)
is
setpush
hashasEveryhasSomeisEmptyequals
auto()dbgenerated()
onDelete: RestrictonDelete: NoActiononDelete: SetDefaultonUpdateactions
$transaction(Isolation levels)$use(Middleware)
Enable indexing for better query performance:
const client = createPrismaMock({}, undefined, undefined, {
enableIndexes: true,
})When enabled, indexes are automatically created for:
- Primary key fields
- Unique fields
- Foreign key fields
This can significantly improve query performance for large datasets.
The mock client throws appropriate Prisma errors with correct error codes:
P2025: Record not found (forfindUniqueOrThrow,findFirstOrThrow)P2002: Unique constraint violationP2003: Foreign key constraint violation
Create your tests in the __tests__ directory. You can use snapshot testing with either expect(res).toMatchSnapshot() or expect(res).toMatchInlineSnapshot().
Note: If you choose to use snapshot testing, make sure to first run your tests against the real database to create a snapshot of the expected result.
To run tests against a PostgreSQL database:
yarn run test:postgresTo run tests against prisma-mock (in-memory database):
yarn testCreate a .env-cmdrc file in the root of your project with the following content:
{
"postgres": {
"PROVIDER": "postgresql",
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres?schema=public"
}
}yarn buildContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
MIT