Zenn
Open5

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

Godai HoriGodai Hori

こんな感じで記述すれば動く

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)
})
Godai HoriGodai Hori

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,
    })
  })
});
ログインするとコメントできます