2013-04-01 51 views
0

我試圖做一個幹海蔘功能,我現在面臨一個字符串轉換成給黃瓜:字符串的活動記錄型號名稱

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) 

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

回答

2

您可以看看constantize其中turns a String into a constant。嘗試:

"Balloon".constantize.create!(t) 

但是:在黃瓜步驟中使用你的應用程序代碼(尤其機型)碼味。您的集成測試不應該依賴於測試中的代碼 - 當您實施Cucumber步驟時,將您的應用視爲黑盒子。 (也想到你的模型的重構,需要你回去並改變你的黃瓜步驟 - 這是你的第一條線索,你在錯誤的軌道!)

你可以做什麼來改善這是創建模型使用API​​(如果您的應用程序實現了一個)。

這樣,您只能依靠應用程序中面向公衆的部分。

在另一方面:Given不應該有一個斷言,它更像是一個RSpec的鉤before,爲以後的斷言設立條件...

+0

感謝您的諮詢!我會關注它。 – Andrew