Open5
Next.jsのAPIルートをテストする

Prismaはこれでモックするのが良さそう

APIのReq, Resのモックにはこれ

結局in-memoryで動かせるvitest用のprismaモックを作るにあたった

こんな感じで記述すれば動く
vitest.setup.ts
import { vi, expect, test, describe, beforeEach } from 'vitest'
import createPrismaMock from "vitest-prisma-mock"
vi.mock("@db", async () => {
// @ts-ignore
const { mockDeep } = await vi.importActual("vitest-mock-extended")
const actual = await vi.importActual("@db")
return {
// @ts-ignore
...actual,
default: mockDeep(),
}
});
import prisma, { Prisma } from "@db"
beforeEach(() => {
// mockReset(prisma)
// @ts-ignore
createPrismaMock({}, Prisma.dmmf.datamodel, prisma)
})

APIのテストはこんな感じで行けた
import { expect, test, describe } from 'vitest'
import httpMocks from 'node-mocks-http'
import handler from '@api/users/me'
import { createUser } from '__tests__/utils/user';
describe('GET /api/users/me', () => {
test('should return 200', async () => {
const user = await createUser()
const req = httpMocks.createRequest({
method: 'GET',
url: '/api/users/me',
})
const res = httpMocks.createResponse()
await handler(req, res)
expect(res.statusCode).toBe(200)
expect(res._getJSONData()).toMatchObject({
award: user.award,
email: user.email,
hasNotification: user.hasNotification,
id: user.id,
image: user.image,
name: user.name,
removed: user.removed,
role: user.role,
})
})
});
ログインするとコメントできます