ruby-on-rails - 如何在 Controller 能力测试中 stub load_and_authorize_resource 的负载?

标签 ruby-on-rails rspec cancan

我在测试中有这个:

let(:ability) { Object.new.extend(CanCan::Ability) }

...
describe "GET show" do
  it 'redirects to root if havent read ability' do
    allow(@controller).to receive(:current_ability).and_return(ability)
    ability.cannot :read, Book
    get :show, { id: '1'}
    response.should redirect_to(root_url)
  end
...

在 Controller 中,我有来自 cancan 的 load_and_authorize_resource,当测试运行时,它尝试从 id = 1 的数据库中获取记录。我只需要测试 authorize_resource,而不是负载。

我已经通过在调用 get 之前在 Controller 中设置实例变量来修复它:
@controller.instance_variable_set('@author', true) # to skip load_resource

但这不是完美的决定。在使用 load_and_authorize_resource 的 Controller 中测试能力时,跳过加载并仅检查 authorize_resource 是一种更好的方法吗?

最佳答案

好像

allow_any_instance_of(CanCan::ControllerResource).to receive(:load_resource)

工作正常

关于ruby-on-rails - 如何在 Controller 能力测试中 stub load_and_authorize_resource 的负载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22012241/

相关文章:

ruby-on-rails - Ajax 发布点击 Action ,无需使用 CanCan 和 Devise 进行身份验证

ruby-on-rails - Rails cancan :manage all Offers as moderator which belong to the same Department

ruby-on-rails - 来自控制台的 ActionCable.server.broadcast 总是返回 0

ruby-on-rails - 在 GitHub 上测试 fork 的 ruby​​ gems/插件

ruby-on-rails - 在 RoR 中为 open-uri 设置一个新的 DNS

ruby-on-rails - Rails 4 - 语法错误,意外的 tIDENTIFIER,期望输入结束

Ruby 返回意外的 nil

ruby-on-rails-3 - Ruby on rails、cancan 和默认角色分配

ruby-on-rails - 如何阻止 VCR 覆盖磁带中的 erb

ruby-on-rails - 为 rails 应用旋转日志的最佳方式是什么