有什么方法可以模拟请求规范中的Pundit策略授权?

问题描述 投票:1回答:2

我正在使用Pundit在我的Rails应用程序上进行授权,并且正在对我的请求进行单元测试。我已经成功测试了该策略,但是现在我想验证我的请求正在使用该策略。我想以一种通用的方式做到这一点,以便可以在任何请求规范中使用(无论控制器,操作和策略如何)。老实说,在这一点上,我将遵循一种对所有请求通用的“期望任何策略接受授权”的方式。

对于索引操作(使用策略范围),这很容易:

在请求中描述我说

RSpec.describe 'GET /companies', type: :request do
  include_context 'invokes policy scope'
end

然后我将共享上下文定义为:

RSpec.shared_context 'invokes policy scope', shared_context: :metadata do
  before do
    expect(Pundit).to receive(:policy_scope!) do |user_context, relation|
      expect(user_context.user).to eq(user)
      expect(user_context.current_group).to eq(group)

      relation
    end
  end
end

但是我如何对authorize方法执行相同的操作。我不知道哪个具体策略将是接收该策略的人,也不是哪个具体控制器将调用authorize

我不知道pundit如何不提供自定义匹配器来验证某个请求实际上是在调用给定策略,还是“模拟”授权/未经授权的方案,因此我测试我的请求是否返回正确的状态代码。

有什么想法吗?

ruby-on-rails rspec rspec-rails pundit
2个回答
1
投票

首先,您需要单独测试pundit策略。第二,要传递pundit策略,可以对满足pundit策略的对象进行存根]


0
投票

所以,我有几点评论...

© www.soinside.com 2019 - 2024. All rights reserved.