[开源] < 800 bytes 用一个更爽的方式生成 mock 假数据

2021-02-04 10:19:10 +08:00
 50vip

最近在做可视化图表 G2Plot 的性能测试和优化,第一步就是 mock 指定结构的数据,一般大家都用 mockjs,但是我看了 API 和语法,感觉有点黑了,不好用,于是自己造了一个轮子( miz ),感觉代码写的还不错,分享给大家!

项目地址:miz

举例子,生成一个长度为 2 的用户信息。(使用方法类似于 react 的 prop-types )

import { M } from 'miz';

const m = M.arrayOf(M.shape({
  id: M.number(10000, 1000000),     // id is between 10000 ~ 1000000.
  name: M.string(6),                // 6 length random string.
  sex: M.bool(),                    // random true or false.
  city: 'hz',                        // constant value.
  work: M.oneOf(['QA', 'FED'])      // random from array
}), 2);                              // list length is 2.

m.mock();

Then will get the mock variable like below:

[{
	id: 757852,
	name: 'mU7RTB',
	sex: false,
	city: 'hz',
	work: 'FED'
}, {
	id: 359987,
	name: 'jWuKxX',
	sex: true,
	city: 'hz',
	work: 'FED'
}]

如果觉得好用,不吝点个 star ^_^

2667 次点击
所在节点    分享创造
14 条回复
no1xsyzy
2021-02-04 11:56:51 +08:00
假数据不是 mock 而是 dummy data 或者 fake data 。mock 是指假调用
搜索了一下,比如 npm i fake-data-generator 这个,其实很像,不过是写 json 配置的
no1xsyzy
2021-02-04 12:04:04 +08:00
看了一下,其实你连 mockjs 的 Get Started 示例都不能用正常方法做出来吧
怎么做一个自增键?
50vip
2021-02-04 15:44:22 +08:00
@no1xsyzy miz 主要最随机。对于序列是:

M.apply(() => {});
THP301
2021-02-04 16:09:43 +08:00
mock 形容词: 虚假, 虚设, 义
mock 假数据 = 虚假的假数据 = 真数据 ?
no1xsyzy
2021-02-04 19:34:22 +08:00
@50vip 我是说 [{id:1}, {id:2}, {id:3}] 这种,你必须在外面定义一个变量。
50vip
2021-02-04 19:51:50 +08:00
@no1xsyzy M.apply(() => _.uniqueId());
50vip
2021-02-04 19:52:32 +08:00
@no1xsyzy 就是不想用 mockjs 的那个不是很懂的语法,所以撸了一个轮子。~~
YouLMAO
2021-02-05 01:13:41 +08:00
大部分的测试都是确定性的,不是随机数据也不是自增数据
YouLMAO
2021-02-05 01:15:08 +08:00
要先有需求再做产品
no1xsyzy
2021-02-05 13:33:18 +08:00
@YouLMAO 自增是确定性的。
一般只跑一次之后就用同一个数据集了。你总不见得拿线上数据测试,或者手撸假数据。

@50vip 所以说还是外部变量,而且起始点还不受控
好,那么来个这个:一个列表,每个元素是章节序号和属于该章节的图片列表、代码块列表
每个图片列表的 ref 应当是 “图 <章节序号>-<该章节内的图片序号>”,代码块列表类似。
用你的库写写看?
你底层抽象彻底错了。操作数据应当使用函数式范式。
https://gist.github.com/no1xsyzy/3cc83e5da3fca783deb74954b915baa0
YouLMAO
2021-02-05 13:38:00 +08:00
@no1xsyzy 建议你看看 gmock 框架,

自增是确定性的, 但很少场景会用到, 举个例子 代码面试要你测自己程序 testcase 你输入 1,2,3,4 吗, 肯定是-1,0,1,+IntMax 等边界条件咯, 测了 2,就不需要测 3 和 4 了
no1xsyzy
2021-02-05 13:46:20 +08:00
另外,arrayOf 有个 bug,你没法调最短为 0 的 array 。
M.arrayOf(..., 0, 5) 会产生一个最短为 5 最长为 20 的序列。
no1xsyzy
2021-02-05 13:53:29 +08:00
@YouLMAO 哦忽略了这点,单元测试不常用……
性能测试和黑箱测试(人工)的话,用 dummy 数据的会比较多。

gmock 似乎是 mock 而不是假数据生成器。
50vip
2021-02-15 21:55:17 +08:00
@YouLMAO 几十行的轮子,要什么需求,就是一个代码模块抽出来而已。帖子第一句介绍了一下小背景了哈哈~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/751152

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX