3

我正在关注 rails_admin 自述文件。我已经设置了 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 时,它会输出一些 html,例如标准 rails_admin dashborad 页面。看起来用户有权访问 rails_admin。

我正在使用 rails 3.2.6、devise 2.1.2、cancan 1.6.8、rails_admin 0.0.5

有任何想法吗?谢谢。

4

1 回答 1

1

我遇到了同样的问题(单个测试运行但不是一次全部运行)。这似乎是由于 rails_admin 在运行测试时默认未初始化。有帮助的是设置

SKIP_RAILS_ADMIN_INITIALIZER=false

在调用 rake 之前。所以现在是

SKIP_RAILS_ADMIN_INITIALIZER=false rake test

为了我。

不幸的是,我不知道如何从测试内部重新初始化 rails_admin(有一个 rake 任务要禁用但不能启用)并且每次都为 rake 测试添加前缀很烦人。此外,如果 rails_admin 被初始化,测试运行的时间也会更长(这可能是它默认关闭的原因)。

我们现在对那些检查 rails_admin 访问的测试使用一个小的测试助手。如果 SKIP_RAILS_ADMIN_INITIALIZER 为真,帮助程序立即返回并记录警告,因此不会在正常的开发系统上运行测试。在我们的持续集成系统上设置了 SKIP_RAILS_ADMIN_INITIALIZER=false 并运行测试。

于 2012-12-05T15:22:51.793 回答