現在取り組んでいる Ruby on Rails アプリがあり、機能テストで問題が発生しています。特に、テスト中に、同様の資格情報 (同じロールなど) を持つユーザーを介してログインしたときにブラウザーでアクセスできるページへのアクセスが拒否され続けます。たとえば、コントローラーのテストのコードは次のとおりです。
include Devise::TestHelpers
include Authorization::TestHelper
...
setup do
@user = Factory(:user)
@user.roles << Factory(:refinery_role)
@user.roles << Factory(:agency_role)
@user.save
sign_in @user
@agency = AgencyOrganization.create :name => "Test Agency"
@adv1 = AdvertiserOrganization.create :name => "Test Advertiser", :parent => @agency
UserOrganization.create :user_id => @user.id, :organization_id => @agency.id
end
test "agency user can edit advertiser" do
assert @user.has_role? :agency #passes
should_be_allowed_to :update, :advertiser_organizations #passes
get :edit, {:id => @adv1.id}, {:agency_id => @agency.id}
assert_equal "/unauthorized", request.env['PATH_INFO'] #passes :'(
assert_template :edit #fails
# and more tests we never get to
end
(明らかに、私が実際に確認したい主張はすべてではありませんが、何が起こっているかを示しています。)
価値があるのは、上記のテストが失敗し、次の例外が発生することです。
4) Failure:
test_agency_user_can_edit_advertiser(AdvertiserOrganizationsControllerTest [/Users/gworley/.rvm/gems/ruby-1.9.2-p180@portal/gems/declarative_authorization-0.5.1/lib/declarative_authorization/maintenance.rb:170]:
Exception raised:
<#<Authorization::NotAuthorized: No matching rules found for update for #<Authorization::GuestUser:0x00000101cda2b0 @role_symbols=[:guest]> (roles [:guest], privileges [:update, :manage], context :advertiser_organizations).>>.
繰り返しますが、私が言ったように、実際にアプリを実行しているときはすべてが機能し、テストが機能するだけです (アプリが偶然に機能しているだけかもしれませんが、誰にもわかりません)。