摘要常见的rspec功能

时间:2014-12-31 16:49:45

标签: ruby-on-rails ruby rspec 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块之外使用doubleallow,因此该模块不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

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

如果我没记错的话,allow_policy可用,如果你这样做的话就属于属性。