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

cucumber:活动记录模型名称的字符串,cucumber,bdd,Cucumber,Bdd,我正在尝试一个干巴巴的特性,但我面临着将字符串转换为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 (

我正在尝试一个干巴巴的特性,但我面临着将字符串转换为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)

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

您可以查看
constantize
。尝试:

但是:在黄瓜步骤中使用应用程序代码(特别是型号)是一种代码气味。你的集成测试根本不应该依赖于测试中的代码,当你实现这些步骤时,把你的应用程序看作一个黑盒子。(还可以考虑对模型进行重构,要求您返回并更改黄瓜步骤,这是您第一次发现自己走错了方向!)

要改进这一点,您可以使用API创建模型(如果您的应用程序实现了API)

这样,你只需要依赖你的应用程序中面向公众的部分

另一方面:您的
给定的
不应该有断言,它更像是RSpec中
之前的
钩子,为以后的断言设置条件

"Balloon".constantize.create!(t)