Использование shoulda «должен» без блока

Я использовал должен с радостью вот так:

context "test world" do
  setup do
   @world = ...
  end

  should "be spinning" do
   assert_equal "spinning", @world.movement
  end

  ... and so on
end

Мне нужен совет по пониманию этого варианта:

class PostTest < Test::Unit::TestCase
   should belong_to(:user)
   should have_many(:tags).through(:taggings)

   should validate_uniqueness_of(:title)
   should validate_presence_of(:body).with_message(/wtf/)
   should validate_presence_of(:title)
   should validate_numericality_of(:user_id)
 end

Что мне не ясно, так это то, над чем работают различные «должны принадлежать (: пользователю)» и т. Д. Другими словами, кажется совершенно очевидным, что они работают с экземпляром Post, но что это определяет? Какова тема строк «должен ххх»?

Я знаю, что это вопрос новичка, поэтому любой указатель будет отличным!


person pitosalas    schedule 28.12.2010    source источник


Ответы (1)


shoulda определяет ряд однострочных утверждений, которые можно использовать вместо блока, чтобы сделать некоторые виды тестов более краткими. Это конкретные утверждения о модели Active Record.

Вы правы в том, что предметом этих утверждений является объект Post. Это определяется из названия тестового класса. Если вы хотите следовать этому, взгляните на источник:

https://github.com/thoughtbot/shoulda/blob/master/lib/shoulda/context.rb

Метод construct_subject удаляет суффикс Test и создает экземпляр результирующего имени класса. А если вам интересны конкретные однострочные утверждения для Active Record, взгляните на сопоставители Active Record:

https://github.com/thoughtbot/shoulda/tree/master/lib/shoulda/active_record/matchers

person Steve    schedule 28.12.2010