从夹具生成新记录

时间:2013-01-31 06:06:52

标签: ruby-on-rails-3 unit-testing fixtures

我有一个名为“group”的夹具:

one:
   customer: one
   name: MyString

在一次测试中我需要更多,所以我想做一些像:

  (1..3).each { |t| Group.create!(groups(:one), name: "Group #{t}")}

有没有办法用夹具做类似的事情? (以上当然不起作用)。我知道我可以使用工厂,但我想继续使用灯具。

3 个答案:

答案 0 :(得分:0)

你的第二个例子是 Factory

如果您想使用(yaml)灯具,您可以使用类似于第二个示例的脚本生成它们,如下所示:

y = {"two" => {"customer" => "two", "name" => "londiwe"}}.to_yaml   
fi = open("groups.yml", "w")
fi.write(y)
fi.close

在评论后修改: 如果您只想从现有记录中获取属性并根据该记录创建新记录,请使用clone
1.首先找到你要克隆的记录:

orig = Group.find_by_customer("one")

2。创建克隆,更改其属性并保存

(1..3).each do 
     tmp_clone = orig.clone 
     tmp_clone.name = "two"
     tmp_clone.save
end

答案 1 :(得分:0)

您可以像活动记录对象一样使用您的灯具。

//Replace MDL icon with our sprite
function mdl_drawer_btn() {
    var mdl_drawer_button = document.querySelector('.mdl-layout__drawer-button');
    if (mdl_drawer_button != null) {
        mdl_drawer_button.innerHTML = '<svg viewBox="0 0 100 100" class="icon nav-icon"><use xlink:href="#nav-icon"></use></svg>';
      } else {
        setTimeout(mdl_drawer_btn, 100);
      }
  }

setTimeout(mdl_drawer_btn, 100);

更新:更轻松

记住clone方法,更简单

# get attr from fixture & delete id
attr_from_fixture = groups(:one).attributes
attr_from_fixture.delete('id')

# create new
(1..3).each do |t| 
   attr_from_fixture[:name] = "Group #{t}"
   Group.create!(attr_from_fixture)
end

答案 2 :(得分:0)

#dup返回一个新对象。无ID的无性繁殖。

(1..3).each do |t| 
   new_group = groups(:one).dup
   new_group.name = "Group #{t}"
   new_group.save
end