Rosie? factory_girl?

如果说是单纯命名上面,是受一幅画的影响,画里面的妹子叫Rosie;
如果是项目灵感其实是来自于factory_girl,factory_girl在github以及segmentfault上的资料都有一些,百度也找得到,但是关于Rosie的着实不多,所以就想share下。
图片描述

What

Rosie的作用主要就是构建一些js的数据对象,大部分使用场景也是在测试中。

虽然这部分和mock service没有直接的关系,但是因为在整个涉及到api的test过程中(非单元测试),我们的套路一般是用工具生成假的数据对象(结构和真实的一致),然后把数据传给对应的mock service,所以暂时也把本文放在mock service 系列。

How

一般使用npm或者yarn 添加依赖并安装js包就可以使用。

具体使用时候,一般会有一个factory用来构建,另外一个在需要数据的地方进行直接引入。好处是数据构建逻辑和业务处理的逻辑可以隔离。
在object builder 部分

import { Factory } from 'rosie'
export default new Factory()
  .sequence('id')
  .attr('Type', () => 'User')
  .attr('Name', {first: 'Yangyang', last:'Cao')
  .attr('Birthday':'1992-01-01')
  .attr('Job', {company:'TW',position:'Developer'})

在使用的部分

 import ProfileFactory from './fixtures/profile'
 beforeEach(() => {
    parameters = {
      ID: '00124B00000zU5f17AE',
      Profile: ProfileFactory.build()
    }
  })

其他的使用方法也是存在的,具体请参考github

Why

为什么使用,本人是因为之前每次在before each 或者自己写builder太麻烦了,最常见的是,在一个已有的obeject上面增加新的属性,烦不胜烦。

When

当你厌倦已有的无论是字面量生成mock data,还是单独数据builder 生成mock data的方式。
感觉用Rosie更符合语义以及函数思维。

缺点

暂时没发现,增加了新的依赖算吗?


Yangyang
105 声望11 粉丝

Coding/Reading|Thinking