You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:27:05