В большом количестве наших тестах контроллера мы должны гашу функциональность пандит политики следующим образом:Абстрагируясь из общего 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
за пределами описания блока и поэтому этот модуль не работает.
Как я могу добиться чего-то подобного?
Да, я делал это, но 'allow'' receive' и другие функции rspec по-прежнему недоступны в PolicyFaker – grossadamm