方法来指出简单的模型方法

时间:2009-05-12 07:45:17

标签: testing rspec bdd

现在我有一个类似的模型函数:

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"

您认为哪种方式更好?支持一方与另一方相比的原因是什么?

1 个答案:

答案 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"