快速生成模拟数据的工具:@faker-js/faker

1,615 阅读4分钟

@faker-js/faker 是一个用于生成虚拟数据(如姓名、地址、电子邮件、公司名称等)的 JavaScript 库。它可以在开发过程中用于填充假数据,特别适用于测试、模拟数据和开发环境中需要大量随机数据的场景。faker.js 曾是一个广泛使用的库,但由于维护问题,@faker-js/faker 是一个社区维护的替代版本,保持了与原版类似的 API,并进行了更新和优化,支持现代 JavaScript 特性。使用该库,开发者可以轻松生成各种随机数据,以便更好地测试和模拟应用程序的功能。

NPM地址: www.npmjs.com/package/@fa…

API地址: v9.fakerjs.dev/api/book.ht…

使用

pnpm add @faker-js/faker

import { fakerZH_CN as faker } from '@faker-js/faker';

@faker-js/faker 与其他常见虚拟数据生成库的对比:

特性@faker-js/fakerFaker.js (原版)Chance.jsCasualRandexp.jsMock.js
维护情况社区维护,活跃更新停止维护,社区支持较少活跃维护,定期更新活跃维护,定期更新停止维护,支持有限活跃维护,定期更新
数据类型姓名、地址、公司、日期、电话号码等姓名、地址、公司、日期、电话号码等姓名、地址、日期、随机数、颜色等姓名、地址、公司、颜色等随机生成符合正则表达式的数据姓名、地址、日期、公司、头像等
API 简洁性简单,易于使用简单,易于使用丰富,灵活,支持多种数据类型简单,轻量级,适合快速生成数据简单,基于正则表达式,适合特定模式数据丰富,支持模拟 Ajax 请求及复杂数据
文档与社区支持完善,社区活跃较少更新,文档和社区支持有限良好,文档齐全,社区活跃简单,文档简洁,社区活跃简单,文档较少,社区支持有限丰富,文档详细,社区活跃
适用场景生成各种测试数据,模拟真实环境的假数据测试和开发中生成虚拟数据需要更多自定义和多样化数据生成的场景简单的随机数据生成,适用于小项目需要正则匹配模式的数据生成场景生成复杂的假数据,模拟接口数据
大小与性能较小,性能较好较小,性能较好较大,性能开销较高较小,适合快速开发较小,基于正则的生成模式性能较高较大,性能相对开销较高

总结:

  • 如果需要快速生成虚拟数据,并且对社区支持有较高需求,@faker-js/faker 和 Faker.js 是不错的选择。
  • 如果需要生成更复杂、多样化的随机数据,Chance.js 提供了更多功能和灵活性。
  • 如果项目需要正则表达式匹配数据生成,可以考虑 Randexp.js。
  • 对于简单、轻量的需求,Casual 是一个合适的选择。
  • 如果你需要生成复杂的假数据,尤其是在前端开发中模拟接口返回数据时,Mock.js 是一个强大的工具。

@faker-js/faker 常用方法

生成个人信息

  • faker.person.firstName():生成随机名字。
  • faker.person.lastName():生成随机姓氏。
  • faker.person.fullName():生成全名。
import { fakerZH_CN as faker } from '@faker-js/faker';
console.log(faker.person.firstName()); // 瑞霖
console.log(faker.person.lastName()); // 熊
console.log(faker.person.fullName()); // 经俊杰

生成地址信息

  • faker.location.city():生成随机城市名称。
  • faker.location.streetAddress():生成随机街道地址。
  • faker.location.country():生成随机国家名称。
  • faker.location.zipCode():生成邮政编码。
console.log(faker.location.city());         // "上海"
console.log(faker.location.streetAddress()); // "人民路100号"
console.log(faker.location.country());       // "中国"
console.log(faker.location.zipCode());       // "200001"

生成联系方式

  • faker.phone.number():生成随机电话号码。
  • faker.internet.email():生成随机邮箱地址。
  • faker.internet.url():生成随机网址。
console.log(faker.phone.number());       // "138-1234-5678"
console.log(faker.internet.email());     // "zhangsan@example.com"
console.log(faker.internet.url());       // "https://example.cn"

生成公司信息

  • faker.company.name():生成随机公司名称。
  • faker.company.catchPhrase():生成随机公司口号。
console.log(faker.company.name());        // "未来科技有限公司"
console.log(faker.company.catchPhrase()); // "创新驱动未来"

生成日期和时间

  • faker.date.past():生成过去的日期。
  • faker.date.future():生成未来的日期。
  • faker.date.between():生成指定时间范围内的随机日期。
console.log(faker.date.past()); // "2022-08-15T12:34:56.789Z"
console.log(faker.date.future()); // "2025-10-21T09:12:34.567Z"
console.log(
  faker.date.between({
    from: '2020-01-01',
    to: '2023-01-01',
  }),
); // "2021-06-12T04:23:45.000Z"

生成随机文字

  • faker.word.sample():生成随机单词。
  • faker.lorem.paragraph():生成随机段落。
  • faker.lorem.sentence():生成随机句子。
console.log(faker.word.sample());        // "测试"
console.log(faker.lorem.sentence());     // "这是一段模拟测试数据。"
console.log(faker.lorem.paragraph());    // "前端开发中,经常需要模拟一些数据用来测试功能。"

生成随机数字

  • faker.number.int():生成随机整数。
  • faker.number.float():生成随机浮点数。
console.log(faker.number.int({ min: 10, max: 100 }));  // 42
console.log(faker.number.float({ min: 0, max: 1, precision: 0.01 })); // 0.57

生成图像链接

  • faker.number.int():生成随机整数。
  • faker.image.avatar():生成随机头像图片。
console.log(faker.image.url());     // "https://picsum.photos/200/300"
console.log(faker.image.avatar());  // "https://randomuser.me/api/portraits/men/1.jpg"

常用工具方法

  • faker.helpers.arrayElement():从数组中随机挑选一个元素。
  • faker.helpers.objectValue():从对象中随机挑选一个值。
  • faker.helpers.fake():通过模板生成数据。
console.log(faker.helpers.arrayElement(['苹果', '香蕉', '橘子'])); // "香蕉"
console.log(faker.helpers.objectValue({ key1: '值1', key2: '值2' })); // "值1"
console.log(faker.helpers.fake("{{person.firstName}} {{person.lastName}}住在{{location.city}}。"));
// "张三住在上海。"

总结

@faker-js/faker 是一个生成虚拟数据的JavaScript库,用于测试和开发,支持多种数据类型和国际化。它提供了丰富的API,包括个人信息、地址、联系方式等,且易于使用和维护。