我正在尝试使用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)
更优雅的解决方案可能是使用工厂,但我想知道是否可以使用上述方法?
答案 0 :(得分:2)
您可以查看constantize
turns a String into a constant。尝试:
"Balloon".constantize.create!(t)
但:在Cucumber步骤中使用您的应用代码(特别是模型)就是代码味道。您的集成测试不应完全依赖于测试中的代码 - 在实施Cucumber步骤时将您的应用视为黑盒子。 (还想想你的模型重构需要你回去改变你的黄瓜步骤 - 这是你在错误的轨道上的第一个线索!)
您可以采取的措施是使用API创建模型(如果您的应用实现了一个模型)。
这样,您只需依赖应用中那些面向公众的部分。
另一个注意事项:你的Given
不应该有一个断言,它更像是RSpec中的before
挂钩,为以后的断言设置条件。