[node 库推荐] rosie 测试用生成数据

news2024/11/24 10:31:00

[node 库推荐] rosie 测试用生成数据

最近发现一个用来生成 dummy data 非常好用的库,做测试或者 storybook 都挺合适的,npm 官方地址在 rosie,同时有 TS 支持

rosie 用的是 factory pattern,使用真的还蛮简单的,官方文档也比较直接,这里走一下流程,简单的过一下怎么用这个 package

定义和创建对象

这里用一个比较简单的 User 作为案例好了,比如说 User 的类型为:

type IUser = {
  id: number;
  firstName: string;
  lastName: string;
};

实现方式如下:

import { Factory } from "rosie";

Factory.define("user")
  .sequence("id")
  .attr("firstName", "First Name")
  .attr("lastName", "Last Name");

console.log(Factory.build("user"));

在这里插入图片描述

其中 sequence 类似于 id 生成

定义和创建多个对象

如果只需要创建一个对象,那么其实手动 type 会更方便一些,不过总会遇到需要生成一组数据,这个时候就能体现 rosie 的优势:

import { Factory } from "rosie";

Factory.define("user")
  .sequence("id")
  .attr("firstName", "First Name")
  .attr("lastName", "Last Name");

const users = Factory.buildList("user", 10);

users;

在这里插入图片描述

如果再搭配 faker 进行使用:

import { Factory } from "rosie";
import { faker } from "@faker-js/faker";

Factory.define("user")
  .sequence("id")
  .attr("firstName", () => faker.person.firstName())
  .attr("lastName", () => faker.person.lastName());

const users = Factory.buildList("user", 10);

users;

在这里插入图片描述

那么就能够生成 10 个随机的用户信息

嵌套对象

这里的补全一下用户的定义,使其结构大致如下:

type IAddress = {
  addr1: string;
  addr2?: string;
  zipcode: string;
  city: string;
  state: string;
};

type IUser = {
  id: number;
  firstName: string;
  lastName: string;
  address: IAddress;
};

用 rosie 也能够简单的达成目的:

import { Factory } from "rosie";
import { faker } from "@faker-js/faker";

// define address object
Factory.define("address")
  .attr("addr1", () => faker.location.streetAddress())
  .attr("addr2", () => {
    if (Math.random() < 0.5) {
      return undefined;
    }

    return faker.location.secondaryAddress();
  })
  .attr("zipcode", () => faker.location.zipCode())
  .attr("city", () => faker.location.city())
  .attr("state", () => faker.location.state());

// define user object
Factory.define("user")
  .sequence("id")
  .attr("firstName", () => faker.person.firstName())
  .attr("lastName", () => faker.person.lastName())
  .attr("address", () => Factory.build("address"));

// create list
const users = Factory.buildList("user", 10);

users;

在这里插入图片描述

其他

其实大多数功能这几个函数就能实现了,接下来列举一下可能会碰到的一些其他方法

reset

reset 和 resetAll 是用来重设 Factory 的方法,这个比较多的可以搭配在 beforeEach 或是一些其他的条件去进行,同样也是方便测试

new

这里是 new 一个 factory,主要创建一个新的未注册工厂,这个主要适配 node 的模块化设计模式:

import { Factory } from "rosie";
import { faker } from "@faker-js/faker";

const AddressFactory = new Factory()
  .attr("addr1", () => faker.location.streetAddress())
  .attr("addr2", () => {
    if (Math.random() < 0.5) {
      return undefined;
    }

    return faker.location.secondaryAddress();
  })
  .attr("zipcode", () => faker.location.zipCode())
  .attr("city", () => faker.location.city())
  .attr("state", () => faker.location.state());

Factory.define("player")
  .sequence("id")
  .attr("firstName", () => faker.person.firstName())
  .attr("lastName", () => faker.person.lastName())
  .attr("address", () => AddressFactory.build());

const users = Factory.buildList("player", 10);

users;

在这里插入图片描述

这种实现下,AddressFactory 也可以被 export 到其他的地方反复使用,而不需要使用 Factory singleton

options

前面是否生成第二个地址采取的使用一个伪随机的方式去生成的,不过 rosie 也支持通过参数的方法实现,如:

const AddressFactory = new Factory()
  .option("withAddr2", true)
  .attr("addr1", () => faker.location.streetAddress())
  .attr("addr2", ["withAddr2"], (withAddr2) => {
    console.log(withAddr2);
    return withAddr2 ? faker.location.secondaryAddress() : undefined;
  })
  .attr("zipcode", () => faker.location.zipCode())
  .attr("city", () => faker.location.city())
  .attr("state", () => faker.location.state());

Factory.define("player")
  .sequence("id")
  .attr("firstName", () => faker.person.firstName())
  .attr("lastName", () => faker.person.lastName())
  .attr("address", () => AddressFactory.build({}, { withAddr2: false }));

const users = Factory.buildList("player", 1);

users;

效果如下:

在这里插入图片描述

这样可以根据一些条件去生成对应的属性,以便于更加灵活可控的进行测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1600806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

transformer上手(9)—— 翻译任务

运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务&#xff0c;即对于每一个输入序列都会输出一个对应的序列。翻译在任务形式上与许多其他任务很接近&#xff0c;例如&#xff1a; 文本摘要 (Summarization)&#xff1a;将长…

Java集合进阶——泛型

1.泛型 介绍&#xff1a; 泛型可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 应用场景&#xff1a; 如果在定义类、方法、接口的时候&#xff0c;如果类型不确定&#xff0c;就可以使用泛型。 格式&#xff1a; <数据类型> 注意&#xff1a; 泛型只支持引…

[C++][算法基础]判定二分图(染色法)

给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行&#xff0c;每行包含两个整数 u 和 v&#xff0c;表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图是二分图…

OpenHarmony、HarmonyOS和Harmony NEXT 《我们不一样》

1. OpenHarmony 定义与地位&#xff1a;OpenHarmony是鸿蒙系统的底层内核系统&#xff0c;集成了Linux内核和LiteOS&#xff0c;为各种设备提供统一的操作系统解决方案。 开源与商用&#xff1a;OpenHarmony是一个开源项目&#xff0c;允许开发者自由访问和使用其源代码&#…

【【相机运动】_Camera_shake镜头晃动动画】

【相机运动】:Camera shake镜头晃动动画 2022-07-20 20:28 评论(0)

绝地求生:PCL大名单公布,艾伦格三巨头惨遭拆散

就在4.16号PCL官博公布了春季赛的参赛大名单&#xff0c;此次比赛不再像以前一样分为艾伦格、米拉玛和维寒迪三组&#xff0c;而是重新打乱分成了A、B、C三组。 具体名单如下 不仅多了很多新战队&#xff0c;还有一些老家伙也回到了赛场上&#xff0c;比如四大名捕的TSG。

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏&#xff0c;可以两台设备同时开启一局拼图游戏&#xff0c;每次点击九宫格内的图片&#xff0c;都会同步更新两台设备的图片位置。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使…

鸿蒙画布组件使用介绍

一、前言 DevEco Studio版本&#xff1a;4.0.0.600 前些天写了一篇 鸿蒙自定义控件实现罗盘数字时钟效果 的文章&#xff0c;有同学私信说能不能介绍鸿蒙中的画布组件&#xff0c;下面文章介绍下鸿蒙中的Canvas画布、CanvasRenderingContext2D绘制组件&#xff0c;实现绘制文…

权限管理Ranger详解

文章目录 一、Ranger概述与安装1、Ranger概述1.1 Ranger介绍1.2 Ranger的目标1.3 Ranger支持的框架1.4 Ranger的架构1.5 Ranger的工作原理 2、Ranger安装2.1 创建系统用户和Kerberos主体2.2 数据库环境准备2.3 安装RangerAdmin2.4 启动RangerAdmin 二、Ranger简单使用1、安装 R…

Docker Container (容器) 常见命令

Docker 容器的生命周期 什么是容器&#xff1f; 通俗地讲&#xff0c;容器是镜像的运行实体。镜像是静态的只读文件&#xff0c;而容器带有运行时需要的可写文件层&#xff0c;并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容 器有初建、运行、停止、暂停和删除…

Unity类银河恶魔城学习记录12-18,19 p140 Options UI-p141 Finalising ToolTip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_ToolTip.cs using TMPro; using UnityEngine;public class UI_ToolTip :…

Git回滚操作,工作区和暂存区恢复修改删除的文件

在利用git协作过程中&#xff0c;经常需要进行代码的撤销操作&#xff0c;这个行为可能发生在工作区&#xff0c;暂存区或者仓库区&#xff08;或版本库&#xff09;。 我们先讨论在工作区与暂存区发生的撤销行为&#xff0c;这里会有两个命令提供帮助&#xff0c;git restore…

【管理咨询宝藏72】MBB大型城投集团能源板块行业分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏72】MBB大型城投集团能源板块行业分析报告 【格式】PDF版本 【关键词】战略规划、商业分析、管理咨询、MBB顶级咨询公司 【强烈推荐】 这是一套…

【Phytium】飞腾D2000 UEFI/EDK2 适配 RTC(IIC SD3077)

文章目录 0. env1. 软件2. 硬件 10. 需求1. 硬件2. 软件 20. DatasheetCPURTC 30. 调试步骤1. 硬件环境搭建2. UEFI 开发环境搭建3. 修改步骤1. UEFI 中使能RTC驱动、配置RTC信息等1.1 使能RTC驱动1.2 修改RTC对应的IIC配置信息1.3 解决驱动冲突1.4 验证波形 2. 修改对应RTC驱动…

2.2 @SpringBootApplication

2.2 SpringBootApplication 在前文的介绍中&#xff0c;读者已经了解到SpringBootApplication注解是加在项目的启动类上的。 SpringBootApplication实际上是一个组合注解&#xff0c;定义如下&#xff1a; SpringBootConfiguration EnableAutoConfiguration ComponentScan(exc…

Qt 实战(2)搭建开发环境 | 2.1、Windows下安装QT

一、Windows下安装QT 1、QT官网 QT官网&#xff1a;https://download.qt.io/&#xff0c;打开官网地址&#xff0c;如下&#xff1a; 目录结构介绍 目录说明snapshots预览版&#xff0c;最新的开发测试中的 Qt 库和开发工具onlineQt 在线安装源official_releases正式发布版&am…

STM32 F103 C8T6开发笔记14:与HLK-LD303-24G测距雷达通信

今日尝试配通STM32 F103 ZET6与HLK-LD303-24G测距雷达的串口通信解码 文章提供测试代码...... 目录 HLK-LD303-24G测距雷达外观&#xff1a; 线路连接准备&#xff1a; 定时器与串口配置准备&#xff1a; 定时器2的初始化&#xff1a; 串口1、2初始化&#xff1a; 串口1、2自定…

Vue加载glb / gltf模型(如何在vue中使用Three.js,vue使用threejs加载glb模型)

简介&#xff1a;Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API&#xff0c;使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…

互联网大厂ssp面经,数据结构:part1

1. 数组和链表的区别是什么&#xff1f; a. 数组是一种线性数据结构&#xff0c;存储在连续的内存块中&#xff0c;元素可以通过索引直接访问。 b. 链表是由节点组成的数据结构&#xff0c;每个节点包含数据和指向下一个节点的指针。 2. 数组和链表的的优缺点是什么&#xff…

原始部落版本潮玩宇宙小程序定制大逃杀游戏APP开发H5游戏

原始部落版本潮玩宇宙小程序定制大逃杀游戏APP开发H5游戏 潮玩宇宙小程序定制大逃杀游戏APP开发H5游戏 潮玩宇宙大逃杀小游戏模块成品源码&#xff0c;可嵌入任何平台系统&#xff0c;增加用户粘性&#xff0c;消除泡沫&#xff0c;短视频直播引流。 玩家选择一间房间躲避杀手…