Использование musta «следует» без блока - PullRequest
0 голосов
/ 28 декабря 2010

Я с радостью пользуюсь следующим образом:

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, но что это определяет?Что является предметом строк «следует ххх»?

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

1 Ответ

2 голосов
/ 28 декабря 2010

musta определяет количество однострочных утверждений, которые можно использовать вместо блока, чтобы сделать некоторые виды тестов более краткими. Это конкретные утверждения о модели 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

...