[开源] < 800 bytes 用一个更爽的方式生成 mock 假数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
50vip
V2EX    分享创造

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

  •  
  •   50vip 2021-02-04 10:19:10 +08:00 3064 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做可视化图表 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 ^_^

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

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

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

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

    gmock 似乎是 mock 而不是假数据生成器。
    50vip
        14
    50vip  
    OP
       2021-02-15 21:55:17 +08:00
    @YouLMAO 几十行的轮子,要什么需求,就是一个代码模块抽出来而已。帖子第一句介绍了一下小背景了哈哈~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5423 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:03 PVG 15:03 LAX 00:03 JFK 03:03
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86