1

現在、次のようなモデル関数があります。

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

仕様を作成するには、基本的に2つの方法があります。最初の方法は次のとおりです。

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"

どちらが良いと思いますか?そして、一方を他方に対してサポートする理由は何ですか?

4

1 に答える 1

1

ない。1つ目は少し冗長で、メソッドの実装に少し慣れすぎているように感じます。2つ目は、仕様を工場に緊密に結び付けており、工場を変更する必要がある場合は非常に苦痛になります。

代わりに、短い2番目のスタイルを使用しますが、使用するデータを仕様で明示的にします。

@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"
于 2009-05-12T09:42:10.250 に答える