2

在我们的大量控制器测试中,我们必须像这样删除权威策略功能:

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

不幸的是,您不能使用doubleallow在描述块之外使用,因此该模块不起作用。

我怎样才能完成类似的事情?

4

1 回答 1

0

您是否通过rspec configure包含模块?

RSpec.configure do |c|
  c.include PolicyFaker
end

如果我没记错的话,allow_policy如果你这样做,它将可用并且属性范围。

于 2015-01-01T00:26:59.613 回答