现在我有一个类似的模型函数:
Class Address
def first_line
"#{self.building_name} #{self.street_name} #{self.suburb}".squeeze(" ").strip
end
end
我的地址工厂定义如下:
Factory.define :address do |f|
f.building_name "Alpha"
f.street_name "Bravo St"
f.suburb "Charlie"
end
基本上有两种编写规范的方法,第一种是:
before(:each) do
@address = Factory.build(:address)
end
@address.first_line.should == @address.building_name + " " +
@address.street_name + " " +
@address.suburb
其他方式是
@address.first_line.should == "Alpha Bravo St Charlie"
您认为哪种方式更好?支持一方与另一方相比的原因是什么?
答案 0 :(得分:1)
都不是。第一个是有点冗长,并且对方法的实现感觉有点太过分了。第二个将您的规格与您的工厂紧密结合在一起,当您需要更换工厂时,这将是一个巨大的痛苦。
相反,请使用短秒样式,但要在规范中明确使用数据:
@address = Factory.build(:address, :building_name => "Alpha",
:street_name => "Bravo St.",
:suburb => "Charlie")
@address.first_line.should == "Alpha Bravo St. Charlie"
这也很好,因为您可以为方法提供不同的测试数据,这是测试其他一些功能所必需的:
@address = Factory.build(:address, :building_name => "Alpha ",
:street_name => " Bravo St. ",
:suburb => " Charlie " )
@address.first_line.should == "Alpha Bravo St. Charlie"