在Nextjs的单元测试中模拟数据库调用有点困难,我一直在坚持。我使用@prisma/client进行数据库通信。我研究过https://www.prisma.io/docs/guides/testing/unit-testing,但问题是doc只使用了简单的方法,他们将ctx传递给它,如果我这样做,那么实际的api调用将不理解什么是ctx.user.create?
下面是我的adduser.ts
import type { NextApiRequest, NextApiResponse } from 'next';
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient();
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method === 'POST') {
try {
const user = await prisma.user.create({data: req.body});
const user = await ctx.prisma.user.create({data: req.body});
res.status(200).send(user);
// if I send ctx here then the actual call will not communicate with db
// const user = await ctx.prisma.user.create({data: req.body});
} catch (e: unknown) {
const message = e.message;
res.status(500).send({ message });
}
} else {
return res.status(404).json({ message: 'Request not found!' });
}
}
现在是什么方式来模拟这个prisma.user.create()????我已经尝试过的,我会分享,但不同的方式有不同的问题,只是检查我如何尝试
第一次
请指导我在nextjs handler/api中的单元测试中模拟db调用的解决方案。
2条答案
按热度按时间bgibtngc1#
由于您正在测试的方法是Next.js API路径,因此您不能将自己的上下文作为另一个参数传递,这意味着您不能使用依赖注入路径来模拟Prisma客户端。
尝试按照单元测试文档中的单例模式进行测试,确保你没有错过“先决条件”部分,在那里你将
singleton.ts
添加到你的setupFilesAfterEnv
中。44u64gxh2#
虽然我不熟悉NextJs,但似乎您应该能够使用高阶函数来应用Prisma建议的另一种方法(依赖注入)。