Когда вы тестируете с помощью rspec, куда помещать общие "методы утилиты тестирования"? - PullRequest
24 голосов
/ 14 ноября 2011

Предположим, у вас есть торговый сайт, который продает виджеты.Однако инвентаризация каждого виджета ограничена, поэтому важно поддерживать номер «widget.number_still_available» в актуальном состоянии.

Я хотел бы написать тест rspec в соответствии с

it "always displays the correct number still available" do

   # Assume there is a before method that sets up a widget with 5 available

   widget.number_still_available.should == 5

   # User "a@b.com" purchases 2 widgets
   widget.number_still_available.should == 3

   # User "c@d.com" purchases 1 widget
   widget.number_still_available.shhould == 2

   # User "a@b.com" cancels purchase of 1 widget
   widget.number_still_available.should == 4
end

Я хотел бы иметь возможность писать методы только для тестирования, которые выполняют методы «покупки» и «отмены».Эти действия не соответствуют никаким «реальным» методам в моих моделях по ряду причин (наиболее важно, что в PHP есть отсоединенная серверная система, выполняющая часть действий по покупке и отмене).

Где правильно разместить этот код при использовании RSpec?В огурце я мог бы написать пару шагов - но я не уверен, что правильный эквивалент для RSpec.

Ответы [ 2 ]

45 голосов
/ 15 ноября 2011

Я бы предложил создать новый файл в spec/support с именем purchase_helpers.rb и поместить в него следующее содержимое:

module PurchaseHelpers
  def purchase_widgets(user, count=1)
    # Code goes here
  end

  def cancel_purchase(user, count=1)
    # Code goes here
  end
end

RSpec.configure do |c|
  c.include PurchaseHelpers
end

Преимущество этого в том, что он не добавляется в spec/spec_helper.rb, а вне заполняет этот файл большим количеством кода, не связанного с настройкой RSpec.Отделять вещи - лучший способ сделать вещи.

2 голосов
/ 14 ноября 2011

Вы можете поместить обезьяновый патч в spec_helper.rb или прямо в начало спецификации, если он используется только для этого одного файла.

Это будет более понятно и безопасносоздавать вспомогательные методы, которые используют существующие методы классов, вместо того, чтобы монтировать патчи классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...