@anatine/zod-mock

中文文档
3.14.0发布于 2025/04/04MITTypeScriptCommonJS近 30 天下载 91.9万

使用 Faker 的 Zod 自动模具对象生成器

中文使用文档
文档目录12 节
  1. 安装
  2. 使用量
  3. 使用任何 Zod 计划并创建模拟数据
  4. 覆盖字符串模拟
  5. 添加种子生成器
  6. 添加自定义模拟映射器
  7. 幕后新闻
  8. 对象密钥名 ie () { firstName: z.string() } (中文(简体) )
  9. Zod类型 ie () const something = z.string() (中文(简体) )
  10. 缺少特征
  11. 贷项
  12. 快速分区- api

@anatine/zod-mock (韩语)

使用 伪造者.js 从a 佐德语Name 计划.


安装

@faker-js/faker 是同级依赖关系 @anatine/zod-mock 用于模拟数据生成.

npm install zod @faker-js/faker @anatine/zod-mock

使用量

使用任何 Zod 计划并创建模拟数据

import { generateMock } from '@anatine/zod-mock';
const schema = z.object({
      uid: z.string().nonempty(),
      theme: z.enum([`light`, `dark`]),
      email: z.string().email().optional(),
      phoneNumber: z.string().min(10).optional(),
      avatar: z.string().url().optional(),
      jobTitle: z.string().optional(),
      otherUserEmails: z.array(z.string().email()),
      stringArrays: z.array(z.string()),
      stringLength: z.string().transform((val) => val.length),
      numberCount: z.number().transform((item) => `total value = ${item}`),
      age: z.number().min(18).max(120),
    });
const mockData = generateMock(schema);
// ...

这将生成模拟数据,类似于:

{
  "uid": "3f46b40e-95ed-43d0-9165-0b8730de8d14",
  "theme": "light",
  "email": "[email protected]",
  "phoneNumber": "1-665-405-2226",
  "avatar": "https://cdn.fakercloud.com/avatars/olaolusoga_128.jpg",
  "jobTitle": "Lead Brand Facilitator",
  "otherUserEmails": [
    "[email protected]",
    "[email protected]",
    "[email protected]",
    "[email protected]",
    "[email protected]"
  ],
  "stringArrays": [
    "quisquam",
    "corrupti",
    "atque",
    "sunt",
    "voluptatem"
  ],
  "stringLength": 4,
  "numberCount": "total value = 25430",
  "age": 110
}

覆盖字符串模拟

有时可能有理由对字符串值有一个更具体的模拟.

您可以提供一个选项字段来生成匹配密钥会触发的特定模拟数据.

const schema = z.object({
  locked: z.string(),
  email: z.string().email(),
  primaryColor: z.string(),
});
const mockData = generateMock(schema, {
  stringMap: {
    locked: () => `this return set to the locked value`,
    email: () => `not a email anymore`,
    primaryColor: () => faker.internet.color(),
  },
});

添加种子生成器

为了进行一致的测试,也可以在种子或种子阵列中加入.

const schema = z.object({
  name: z.string(),
  age: z.number(),
});
const seed = 123;
const first = generateMock(schema, { seed });
const second = generateMock(schema, { seed });
expect(first).toEqual(second);

添加自定义模拟映射器

一旦钻入下方以提供一个字符串,数字,布尔值或其他原始值,一个具有匹配名称的函数会被以假名来搜索.

您可以在选项中添加自己的密钥/fn映射器 .


export function mockeryMapper(
  keyName: string,
  fakerInstance: Faker
): FakerFunction | undefined {
  const keyToFnMap: Record<string, FakerFunction> = {
    image: fakerInstance.image.url,
    imageurl: fakerInstance.image.url,
    number: fakerInstance.number.int,
    float: fakerInstance.number.float,
    hexadecimal: fakerInstance.number.hex,
    uuid: fakerInstance.string.uuid,
    boolean: fakerInstance.datatype.boolean,
    // Email more guaranteed to be random for testing
    email: () => fakerInstance.database.mongodbObjectId() + '@example.com'
  };
  return keyName && keyName.toLowerCase() in keyToFnMap
    ? keyToFnMap[keyName.toLowerCase() as never]
    : undefined;
}

const schema = z.object({
  locked: z.string(),
  email: z.string().email(),
  primaryColor: z.string(),
});

const result = generateMock(schema, { mockeryMapper });


幕后新闻

zod-mock 尝试从两个来源生成模拟数据.

  • 对象密钥名 ie (){ firstName: z.string() }(中文(简体) )

    这将检查密钥的字符串名称与所有可用的 faker 函数名称. 匹配时,它利用该函数生成模拟值.

  • Zod类型 ie ()const something = z.string()(中文(简体) )

    如果没有密钥名称(schema不包含对象)或密钥名称匹配, zod-mock 将使用由 zod。 。 。 .

    一些zod过滤器类型(电子邮件,uuid,url,min,max,长度)也会修改结果.

    若为 zod-mock 尚不支持您计划中使用的 Zod 类型, 您可以提供备份模拟函数, 用于该特定类型 .

    const schema = z.object({
      anyVal: z.any()
    });
    const mockData = generateMock(schema, {
      backupMocks: {
        ZodAny: () => 'a value'
      }
    });
    

缺少特征

  • 没有将选项传送到 faker,例如设置电话号码格式
  • 不处理以下 Zod 类型 :
    • 佐德诺
    • Zod 默认
    • Zod 函数
    • Zod 接口
    • 佐德马普
    • Zod 保证
    • ZodSet 软件
    • 佐德图普尔
    • 佐德联盟
    • Zod 未为人知

贷项

  • 快速分区- api

    一个伟大的自由, 提供了一些洞察 处理各种zod类型.


这个库是 nx 单列波的一部分 @anatine/zod-plugins (韩语)。 。 。 .

版本与发布记录

@anatine/zod-mock 共发布 56 个版本,首次发布于 2021/07/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.14.0latest2025/04/041.6 年前
3.13.52025/01/201.8 年前
3.13.42024/03/202 年前
3.13.32023/11/013 年前
3.13.22023/08/013 年前
3.13.12023/07/013 年前

关于 @anatine/zod-mock 的常见问题

@anatine/zod-mock 是什么?

使用 Faker 的 Zod 自动模具对象生成器

如何安装 @anatine/zod-mock?

在项目目录运行 npm install @anatine/zod-mock,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@faker-js/faker(^7.0.0 || ^8.0.0 || ^9.0.0)、zod(^3.21.4)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@anatine/zod-mock 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@anatine/zod-mock 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@anatine/zod-mock 可以商用吗?

@anatine/zod-mock 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@anatine/zod-mock 的下载量有多少?

根据 npm 官方下载统计,@anatine/zod-mock 在 2026/10/06 – 2026/11/04 这 30 天内被下载 918,824 次,日均约 30,627 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@anatine/zod-mock 还在维护吗?

最新版本 3.14.0 发布于 2025/04/04(1.6 年前);至今共发布 56 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/07/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。