Rails: тестирование названных областей с помощью RSpec
Я новичок в тестировании веб-приложений Rails и RSpec. Я работаю с устаревшим кодом и должен добавлять тесты. Итак, каков наилучший способ проверки искателей и названных областей с помощью RSpec?
Я нахожу в Google несколько подходов, но они не идеальны.
Например:
http://paulsturgess.co.uk/articles/show/93-using-rspec-to-test-a-named_scope-in-ruby-on-rails
it "excludes users that are not active" do
@user = Factory(:user, :active => false)
User.active.should_not include(@user)
end
или
http://h1labs.com/notebook/2008/8/21/testing-named-scope-with-rspec
it "should have a published named scope that returns ..." do
Post.published.proxy_options.should == {:conditions => {:published => true}}
end
Я нахожу лучший подход (ИМХО) в "Регламентах железнодорожных испытаний":
should_match_find_method :active_only { :active == true }
где should_match_find_method
настраиваемый вспомогательный метод
Ответы
Ответ 1
Создатель RSpec недавно написал блог, он считает Validations - поведение, ассоциации - структура. Другими словами, он обнаруживает, что ассоциации (и области) не должны непосредственно тестироваться непосредственно. Тесты для них будут следовать поведению, которое вы хотите.
Другими словами, нынешняя мудрость заключается в том, что нет необходимости тестировать каждую область напрямую, поскольку вы будете охватывать эти ассоциации, проверяя поведение своего приложения.
Ответ 2
Проблема с первым подходом заключается в том, что он фактически запрашивает базу данных. Он медленный и ненужный. Если вы не возражаете, вы можете безопасно использовать первый подход. Второй подход быстрый и понятный, поэтому я бы рекомендовал его.