Способ спецификации простого модельного метода - PullRequest
1 голос
/ 12 мая 2009

Сейчас у меня есть функция модели, которая выглядит примерно так:

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 Ответ

1 голос
/ 12 мая 2009

Ни. Первый - немного многословен, а также чувствует себя слишком дружелюбно с реализацией метода. Вторая тесно связывает ваши спецификации с вашими фабриками и будет огромной болью, когда вам нужно сменить Фабрику.

Вместо этого используйте короткий второй стиль, но сделайте данные, используемые явно, в спецификации:

@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"
...