在我们的大量 Controller 测试中,我们必须像这样去除 pundit 策略功能:
policy = double("policy", :show? => true)
allow(UserPolicy).to receive(:new).and_return(policy)
我的目标是以类似 allow_policy(UserPolicy).to(:show?)
的方式结束,这样读起来更容易。
为了实现这一点,我编写了这个小模块,并将其包含在我的规范中。
module PolicyFaker
def allow_policy(policy)
fake_policy = FakedPolicy.new
fake_policy.policy = policy
fake_policy
end
class FakedPolicy
attr_accessor :policy
def to(action)
policy = double("policy", action => true)
allow(policy).to receive(:new).and_return(policy)
end
def not_to(action)
policy = double("policy", action => false)
allow(policy).to receive(:new).and_return(policy)
end
def to_not(action)
not_to(action)
end
end
end
不幸的是,您不能在 describe block 之外使用 double
或 allow
,因此该模块不起作用。
我怎样才能完成类似的事情?
最佳答案
您是否通过 rspec configure 添加了模块? ?
RSpec.configure do |c|
c.include PolicyFaker
end
如果我没记错的话,allow_policy
将可用并且属性范围内,如果你这样做的话。
关于ruby-on-rails - 抽象出常见的 rspec 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27723920/