2014-12-31 1 views
2

В большом количестве наших тестах контроллера мы должны гашу функциональность пандит политики следующим образом:Абстрагируясь из общего Rspec функциональность

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 за пределами описания блока и поэтому этот модуль не работает.

Как я могу добиться чего-то подобного?

ответ

0

Включите ли вы модуль через rspec configure?

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

Если я правильно помню, allow_policy будет доступен и свойство области действия, если вы делаете это таким образом.

+0

Да, я делал это, но 'allow'' receive' и другие функции rspec по-прежнему недоступны в PolicyFaker – grossadamm

 Смежные вопросы

  • Нет связанных вопросов^_^