Jest测试使用Prisma枚举值出现Group[]不可分配错误如何解决?
问题根因
你在测试文件中手动重新定义了Group枚举,即使枚举成员的名称、值和Prisma自动生成的完全一致,TypeScript也会将本地定义的枚举和@prisma/client中自动生成的枚举判定为两个完全独立的类型,因此出现类型不兼容的报错。
解决步骤
- 第一步:删除测试文件中你手动编写的
Group枚举定义 - 第二步:直接从Prisma自动生成的客户端中导入
Group枚举即可,示例代码如下:
/* eslint-disable no-unused-vars */ import { create } from '../index'; import { prismaMock } from '../../../../../db/singleton'; // 导入Prisma自动生成的枚举和类型 import { Group, User } from '@prisma/client'; test('should create new user ', async () => { try { // 可以直接用导入的User类型标注,避免手写对象出现字段不匹配的问题 const userModel: User = { id: 1, email: 'hello@prisma.io', uuid: '65sdf5sa4dfs5sdf54ds5f', createdat: new Date(), updatedat: new Date(), firstname: 'jon', lastname: 'doe', password: '123456', group: [Group.USER], }; const demoUser = { id: 1, email: 'hello@prisma.io', uuid: '65sdf5sa4dfs5sdf54ds5f', firstname: 'jon', lastname: 'doe', password: '123456', group: [Group.USER], }; prismaMock.user.create.mockResolvedValue(userModel); await expect(create(demoUser)).resolves.toEqual({ id: 1, email: 'hello@prisma.io', uuid: '65sdf5sa4dfs5sdf54ds5f', createdat: expect.any(Date), updatedat: expect.any(Date), firstname: 'jon', lastname: 'doe', password: '123456', group: [Group.USER], }); } catch (error) { console.log('*****', error); } });
- 额外优化:示例中我们把断言里的
new Date()换成了expect.any(Date),避免因为生成的Date对象时间戳不同导致测试失败。
注意:不推荐使用类型断言(如
group: [Group.USER as import('@prisma/client').Group])绕过校验,直接导入Prisma自动生成的类型可以从根源避免类型不匹配问题,也能享受到自动类型提示的好处。
内容的提问来源于stack exchange,提问作者jtlindsey
相关产品推荐
相关产品推荐

