在Rails中测试时,我是使用种子还是工厂女孩或两者兼而有之?

时间:2012-05-08 18:42:29

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

我有一个带有几个外键的商店模型。我有state_id,country_id,currency_id,timezone_id等等......我应该为每一个创建一个工厂吗?然后在Store的工厂做类似的事情:

a.state State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA")

或者我应该播种这些数据?

2 个答案:

答案 0 :(得分:3)

如果使用rake seed任务,它只会将其添加到数据库中。但是,许多事情,比如db:test:prepare任务,将删除数据库中的所有记录,因此种子任务将无效。

您的工厂方法看起来不错,但我建议您将代码放在一对括号中。

a.state { State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA") }

每次调用工厂时都会重新运行,并且会阻止在数据库中创建重复项。

答案 1 :(得分:1)

使用工厂女孩,它已经做了耙子做的事。

如果你问我,对于这个特殊情况(暗示你已经在使用工厂女孩),你应该使用耙子。我给你一个更大的NO。这会使您的组织因测试而中断。