如何解决如何在 Jest 27 中模拟 Prisma通过代理
我们的 Prisma 设置如下:
// server/database/prisma.ts
import { Prisma } from 'database/generated/prisma-client';
const client = new Prisma({
endpoint: PRISMA_ENDPOINT,secret: PRISMA_SECRET,debug: PRISMA_DEBUG,});
// Add a proxy 'middleware' to the Prisma client to record query execution time
const prismaProxy = new Proxy(client,{
get(client,endpoint) {
const endTimer = metrics.prisma_call_duration_seconds.startTimer({ endpoint });
return function (...args) {
const result: Prisma = client[endpoint](...args);
endTimer();
return result;
};
},});
export const prisma = prismaProxy;
然后我有一个使用 prisma
的实用程序,我想测试它:
// utils.ts
import { prisma } from 'database/prisma';
export const myFunc = async () => {
const result = await prisma.items();
if (items && items.length > 0) {
return true;
}
return false;
};
如何在测试中模拟 prisma
?在 Jest 26 中,这有效:
// utils.test.ts
jest.mock('server/database/prisma');
import { prisma } from 'server/database/prisma';
import { myFunc } from 'server/utils';
describe.only('my test',() => {
beforeAll(() => {
prisma.items.mockImplementation(() =>
Promise.resolve([
{
foo: 'bar',},])
);
});
test('it works',async () => {
const items = await myFunc();
expect(items).toBeTruthy();
});
});
这似乎不再适用于 Jest 27。除了从 v26 -> v27 升级 Jest 之外,没有做任何更改,模拟似乎不再有效。
在这里模拟 prisma
的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。