tests.ts•2.19 kB
import { faker } from '@faker-js/faker'
import { LogEvent } from '../../../src/runtime/getPrismaClient'
import { NewPrismaClient } from '../_utils/types'
import testMatrix from './_matrix'
// @ts-ignore
import type { PrismaClient } from './generated/prisma/client'
let prisma: PrismaClient
declare const newPrismaClient: NewPrismaClient<PrismaClient, typeof PrismaClient>
const email = faker.internet.email()
testMatrix.setupTestSuite(
() => {
const errors: LogEvent[] = []
beforeAll(() => {
prisma = newPrismaClient({ log: [{ emit: 'event', level: 'error' }] })
// @ts-expect-error - client not typed for log opts for cross generator compatibility - can be improved once we drop the prisma-client-js generator
prisma.$on('error', (e) => errors.push(e))
})
afterEach(() => {
errors.length = 0
})
test('findUniqueOrThrown when error thrown', async () => {
await expect(() =>
prisma.user.findUniqueOrThrow({
where: {
email,
},
}),
).rejects.toMatchObject({
name: 'PrismaClientKnownRequestError',
code: 'P2025',
})
expect(errors).toHaveLength(1)
const errorEvent = errors[0]
expect(errorEvent.message).toContain(
'An operation failed because it depends on one or more records that were required but not found. No record was found for a query.',
)
expect(errorEvent.target).toContain('user.findUniqueOrThrow')
})
test('findFirstOrThrow when error thrown', async () => {
await expect(() =>
prisma.user.findFirstOrThrow({
where: {
email,
},
}),
).rejects.toMatchObject({
name: 'PrismaClientKnownRequestError',
code: 'P2025',
})
expect(errors).toHaveLength(1)
const errorEvent = errors[0]
expect(errorEvent.message).toContain(
'An operation failed because it depends on one or more records that were required but not found. No record was found for a query.',
)
expect(errorEvent.target).toContain('user.findFirstOrThrow')
})
},
{
skipDefaultClientInstance: true,
},
)