在我们的大量控制器测试中,我们必须严格执行权威策略功能:
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块之外使用double
或allow
,因此该模块不起作用。
我怎样才能完成类似的事情?
答案 0 :(得分:0)
您是否通过rspec configure包含该模块?
RSpec.configure do |c|
c.include PolicyFaker
end
如果我没记错的话,allow_policy
可用,如果你这样做的话就属于属性。