V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
50vip
V2EX  ›  分享创造

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

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

    最近在做可视化图表 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   ·   实用小工具   ·   1157 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.