J'utilise RSpec et CanCan dans un projet. Je teste ma logique d'autorisation dans les spécifications relatives à la classe Ability. Pour les contrôleurs, je veux juste m'assurer que je fais une vérification d'autorisation. J'ai mis en place une macro de contrôleur, mais cela ne semble pas fonctionner correctement.Test de contrôleur RSpec et CanCan
Donc vraiment j'ai deux questions. Un, est la stratégie suffisante pour tester la logique d'autorisation de mes contrôleurs (ou devrais-je tester la logique d'autorisation du contrôleur plus)? Deux, est-ce que quelqu'un voit ce que je fais mal pour que cela ne fonctionne pas?
#plan_orders_controller.rb
def approve
plan_order = PlanOrder.find(params[:id])
authorize! :update, plan_order
current_user.approve_plan_order(plan_order)
redirect_to plan_order_workout_plan_url(plan_order)
end
#controller_macros.rb
def it_should_check_permissions(*actions)
actions.each do |action|
it "#{action} action should authorize user to do this action" do
@plan_order = Factory(:plan_order, :id=>1)
ability = Object.new
ability.extend(CanCan::Ability)
controller.stub!(:current_ability).and_return(ability)
get action, :id => 1
ability.should_receive(:can?)
end
end
end
La sortie que je reçois de RSpec est le suivant
Failure/Error: ability.should_receive(:can?)
(#<Object:0x00000006d4fa20>).can?(any args)
expected: 1 time
received: 0 times
# ./spec/controllers/controller_macros/controller_macros.rb:27:in `block (2 levels) in it_should_check_permissions'
Je ne suis pas sûr de la méthode je vérifierai quand je l'appelle! Habilitent au contrôleur (ou il est automatiquement appelé via load_and_authorize_resource)