
Security News
Crates.io Implements Trusted Publishing Support
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
prisma-mock
Advanced tools
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 --dev
Simple 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>
data
(optional)Initial mock data for the Prisma models. An object containing keys for tables and values as arrays of objects.
datamodel
(optional)The Prisma datamodel, typically Prisma.dmmf.datamodel
. Defaults to the current Prisma client's datamodel.
client
(optional)A jest-mock-extended
instance. If not provided, a new instance is created.
options
(optional)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 keysReturns a mock Prisma client with all standard model methods plus:
$getInternalState()
: Method to access the internal data state for testing/debuggingfindUnique
/ findUniqueOrThrow
findMany
findFirst
/ findFirstOrThrow
create
createMany
delete
update
deleteMany
updateMany
upsert
count
aggregate
distinct
include
where
select
orderBy
select: _count
create
createMany
update
updateMany
delete
deleteMany
connect
disconnect
set
upsert
equals
gt
, gte
, lt
, lte
not
in
, notIn
contains
, startsWith
, endsWith
AND
, OR
, NOT
mode
(for case-insensitive matching)some
every
none
increment
decrement
multiply
divide
set
path
string_contains
string_starts_with
string_ends_with
array_contains
array_starts_with
array_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: SetNull
onDelete: 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
set
push
has
hasEvery
hasSome
isEmpty
equals
auto()
dbgenerated()
onDelete: Restrict
onDelete: NoAction
onDelete: SetDefault
onUpdate
actions$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:
This can significantly improve query performance for large datasets.
The mock client throws appropriate Prisma errors with correct error codes:
P2025
: Record not found (for findUniqueOrThrow
, findFirstOrThrow
)P2002
: Unique constraint violationP2003
: Foreign key constraint violationCreate 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:postgres
To run tests against prisma-mock (in-memory database):
yarn test
Create 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 build
Contributions 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
FAQs
Mock prisma for unit testing database
We found that prisma-mock demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.
Research
/Security News
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.