FactoryGirl:来自先前create_list的create_list

时间:2017-08-29 20:53:51

标签: ruby-on-rails ruby factory-bot

我使用FG非常新,我正在尝试从之前的“create_list”调用创建多个对象。这是正确的方法吗?

 let(:questions) { FactoryGirl.create_list :question, 5 }
 let(:answers)   { questions.map do |q|
                     FactoryGirl.create :answer, question: q
                   end
                 }

对我来说很臭。

2 个答案:

答案 0 :(得分:1)

这取决于您的数据模型。

问题是否需要答案?

如果是,请考虑FactoryGirl associations

如果没有,请在需要时在测试中创建它们,因为您可能需要测试问题没有答案的情况。

答案 1 :(得分:1)

所有FactoryGirl构建器方法都支持提供一个块,该块产生新创建的对象。使用此功能,您可以在一次调用中创建记录和关联。

例如,

declare option xdmp:set-transaction-mode "update";

declare variable $prefix-replace := ('C:/', '/expath_console/');

declare function local:recursive-copy($filesystem as xs:string){
   for $e in xdmp:filesystem-directory($filesystem)/dir:entry
    return 
      if($e/dir:type/text() = "file")
         then 
           let $source := $e/dir:pathname/text()
           let $dest := fn:replace($source, $prefix-replace[1], $prefix-replace[2]) 
           let $_ := xdmp:document-insert($source,
              <options xmlns="xdmp:document-load">
                <uri>{$dest}</uri>
              </options>)
           return <record>
                     <from>{$source}</from>
                     <to>{$dest}</to>
                  </record>
         else
           local:recursive-copy($e/dir:pathname)

};

let $filesystemfolder := 'C:\Temp'

return <results>{local:recursive-copy($filesystemfolder)}</results> 

<强>资源