Rails: RSpec を使用した名前付きスコープのテスト
概要
Rails Web アプリケーションと 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
「Rail Test Prescriptions」で最良のアプローチ(私見)を見つけました。
should_match_find_method :active_only { :active == true }
ここで should_match_find_method カスタム ヘルパー メソッド
解決策
RSpec の作成者は最近ブログで、検証は動作であり、関連付けは構造であると考えていると述べています。言い換えれば、彼は関連付け (およびスコープ) は必ずしも直接テストされるべきではないことを発見しました。これらのテストは、必要な動作に従って行われます。
言い換えれば、現在の常識では、アプリケーションの動作をテストすることでこれらの関連付けをカバーするため、各スコープを直接テストする必要はないということになります。