【问题标题】:Way to specing simple model method指定简单模型方法的方法
【发布时间】:2009-05-12 07:45:16
【问题描述】:

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

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

spec基本上有两种写法,第一种是:

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"

你认为哪种方式更好?支持一个反对另一个的原因是什么?

【问题讨论】:

    标签: testing rspec bdd


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多