cucumber:字符串到活动记录模型名称

时间:2013-04-01 20:57:42

标签: cucumber bdd

我正在尝试使用DRY黄瓜功能,我遇到了将字符串转换为ActiveRecord模型名称的问题

Given /^the following "(.+)" exist:/ do |mod, table|
  table.hashes.each do |t|
   mod.create!(t)
  end
  assert mod.all.count == table.hashes.size
end

给出了

undefined method `create!' for "Balloon":String (NoMethodError)

更优雅的解决方案可能是使用工厂,但我想知道是否可以使用上述方法?

1 个答案:

答案 0 :(得分:2)

您可以查看constantize turns a String into a constant。尝试:

"Balloon".constantize.create!(t)

:在Cucumber步骤中使用您的应用代码(特别是模型)就是代码味道。您的集成测试不应完全依赖于测试中的代码 - 在实施Cucumber步骤时将您的应用视为黑盒子。 (还想想你的模型重构需要你回去改变你的黄瓜步骤 - 这是你在错误的轨道上的第一个线索!)

您可以采取的措施是使用API​​创建模型(如果您的应用实现了一个模型)。

这样,您只需依赖应用中那些面向公众的部分。

另一个注意事项:你的Given不应该有一个断言,它更像是RSpec中的before挂钩,为以后的断言设置条件。