`

数据构造

 
阅读更多

测试数据的构造,现在接触的分fixtures和factory_girl

A、先简单介绍下fixtures:

      1、文件位于spec/fixtures/conversations.yml,均以yml结尾,在构造数据时特别要注意的

                是在属性和值间必须用“空格”

            例如:state: 0

      2、在spec测试中调用构造数据的方法

            用数据库表名+fixtures名

            例如:workitems("complain_workitem")

            如表间存在关联关系,则可以这样,用数据库表名+fixtures名+关联表名

            例如:workitems("complain_workitem").conversation

      3、加载数据命令: rake spec:db:fixtures:load

缺点:fixtures里构造的很多数据都是没有检测重复factory的功能、字段检验问题(字段过长不报错)


B、重点总结下factory_girl


当将构造数据从fixtures改为factory_girl时问题一大堆:1、factory重命名问题(堆栈溢出)、2、数据重复问题

 

 

      1、如何解决上述说的第一个问题

            主要出现的几率是不同实体factory的命名,在新建一个factory时要在factories里查找下

                是否有重复命名,一般情况下, 添加一个factory在factories里面会加载进去,除非在

                其他factory里已经显示的加载过

 

      2、数据重复出现的可能性:有继承关系、用Factory()新建了多次、在factories里显示加载

               多次(不同的factory)

         (1)先检查factory本身的继承有没有问题,没有问题进行第二步


         (2)检查与factory相关联的其他factory有没有新建

                 例如:在department里关联district

                             d.district { Factory :nanshan }前提是在factories里已经显示加载过

                                       nanshan,此时这样做会重复出 现。

                 解决办法:在factories里写方法get_distrct来找记录或者新增记录

                                     District.find_by_code(get_attribute(factory_name, :code)) ||

                                                Factory(factory_name),在 department里关联district时,用

                                                d.district { get_district :nanshan }即可。

 

      3、 加载数据命令:rake db:factory_girl:load

       

最后建议在跑spec测试时,将要调用的factory最好在factories里面编写方法,这样可以避免很多问题(取的数据不一致问题)。实例的conversation定义方法:get_conversation


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics