@anatine/zod-mock (韩语)
安装
@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 (韩语)。 。 。 .