3

rails_admin README に従っています。devise と cancan をセットアップしました。グループ admin のユーザーのみが rails_admin にアクセスできます。これがテストです

test "try to access rails_admin as a non admin user" do
  get_via_redirect '/users/auth/facebook'
  assert_response :success
  assert_match 'Successfully authenticated', flash[:notice]

  puts User.all.count
  puts User.first.name
  puts Group.find(User.first.group_id).name
  assert_equal Ability.new(User.first).can?(:access, :dashboard), false
  puts session

  get '/admin'
  assert_response :found
  assert_redirected_to '/'
  assert_match 'You are not authorized', flash[:alert]
end

「ruby -Itest test/integration/test.rb」を実行すると、すべてパスします。出力は

1
Facebook User
user
{"session_id"=>"5345e64582b2557d0d02cd2011461467", "warden.user.user.key"=>["User", [2], "$2a$04$B.nVokuCXSWOpZ2Ezf60Cu"], "flash"=>#<ActionDispatch::Flash::FlashHash:0xb49d9a4 @used=#<Set: {:notice}>, @closed=false, @flashes={:notice=>"Successfully authenticated from facebook account."}, @now=nil>}

「bundle exec rake test:integration」を実行すると、テストが失敗します。出力は

1
Facebook User
user
{"session_id"=>"0005d96c17c75d0843166e5dbb4dcc05", "warden.user.user.key"=>["User", [3], "$2a$04$4f5/I9uSZbMWBdCgDA086O"], "flash"=>#<ActionDispatch::Flash::FlashHash:0xa4c0db0 @used=#<Set: {:notice}>, @closed=false, @flashes={:notice=>"Successfully authenticated from facebook account."}, @now=nil>}
F.

Finished tests in 1.054687s, 3.7926 tests/s, 24.6519 assertions/s.

1) Failure:
test_try_to_access_rails_admin_as_a_non_admin_user(RailsAdminTest):
Expected response to be a <:found>, but was <200>

「assert_select 'body', 'something'」も試してみました。rake test:integration を実行すると、標準の rails_admin ダッシュボード ページのような html が出力されます。ユーザーは rails_admin へのアクセスを許可されているようです。

Rails 3.2.6、devise 2.1.2、cancan 1.6.8、rails_admin 0.0.5 を使用しています。

何か案は?ありがとう。

4

1 に答える 1

1

私は同じ問題を抱えていました(単一のテストが実行されていますが、一度にすべてではありません)。これは、test の実行時に rails_admin がデフォルトで初期化されていないことが原因のようです。役に立ったのは設定でした

SKIP_RAILS_ADMIN_INITIALIZER=false

rake を呼び出す前に。だから今は

SKIP_RAILS_ADMIN_INITIALIZER=false rake test

私のため。

残念ながら、テスト内から rails_admin を再初期化する方法がわかりません (有効にするのではなく、無効にする rake タスクがあります)。毎回 rake test を前に付けるのは面倒です。また、rails_admin が初期化されていると、テストの実行時間がかなり長くなります (これが、おそらくデフォルトで無効になっている理由です)。

rails_admin アクセスをチェックするテストには、小さなテスト ヘルパーを使用するようになりました。SKIP_RAILS_ADMIN_INITIALIZER が true の場合、ヘルパーはすぐに戻り、警告をログに記録し、通常の開発システムでテストを実行しません。当社の継続的インテグレーション システムでは、SKIP_RAILS_ADMIN_INITIALIZER=false が設定され、テストが実行されます。

于 2012-12-05T15:22:51.793 に答える