我喜歡RSpec,並且我非常喜歡它的=~
數組運算符匹配器來驗證數組是否包含一組特定的元素,而不管其排序如何。如何在rspec中測試ActiveRecords的集合?
但是這並不奇怪,它測試指針平等,沒有平等的內容,所以下面將不工作:
class Flea < ActiveRecord::Base ; end
class Dog < ActiveRecord::Base
has_many :fleas
end
@d = Dog.create
@d.fleas << (@f1 = Flea.create)
@d.fleas << (@f2 = Flea.create)
@d.fleas.should =~ [@f1, @f2]
所以我發現自己經常在我的RSpec的測試寫這個:
@d.fleas.map {|f| f.id}.should =~ [@f1.id, @f2.id]
〜bad code smell的reeks。 RSpec是否提供了一種更好的方式來驗證ActiveRecord對象的集合,而不管返回的順序如何?或者至少有更好的方法來編寫這樣的測試?
不把這個作爲一個答案,因爲我相信它也氣味,但你可以做'@ d.flea_ids'而不是映射。 –
是的,但在你的方法是一個比一個reek更味道... :) –