在我们的大量控制器测试中,我们必须像这样删除权威策略功能:
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
不幸的是,您不能使用double
或allow
在描述块之外使用,因此该模块不起作用。
我怎样才能完成类似的事情?