Comment puis-je utiliser RSpec pour tester le code de réponse sur un CanCan échec de l'autorisation?

Je suis en train de travailler sur un des rails de projet dans lequel j'utilise CanCan à autoriser mes ressources. Lorsqu'un utilisateur n'est pas connecté et qu'il tente d'envoyer un "discours" (via une requête ajax formulaire de soumission), french CanCan correctement soulève un 401 avec {"status":"error","message":"You must be logged in to do that!"} que la réponse (j'ai vérifié cela dans le navigateur à l'aide de firebug). Cependant, dans mes tests, obtenez une réponse 302 code plutôt qu'un 401:

class TalksController < ApplicationController
  authorize_resource

  def create
    @talk = current_user.talks.build(params[:talk])

    respond_to do |format|
      if @talk.save
        response = { :redirect => talk_path(@talk) }
        format.html { redirect_to @talk, notice: 'Talk was successfully created.' }
        format.json { render json: response, status: :created,  }
      else
        format.html { render action: "new" }
        format.json { render json: @talk.errors, status: :unprocessable_entity }
      end
    end
  end
end

talks_controller_spec.rb:

describe TalksController do
  describe "POST create" do
    context "when not signed in" do
      it "should not assign talk" do
        post :create
        assigns[:talk].should be_nil
      end
      it "should respond with a 401" do
        post :create
        response.response_code.should == 401
      end
    end
  end
end

Le premier exemple fourni ici est réussi (ayants droit[:parler] n'est pas assigné), mais la seconde ne l'est pas:

1) TalksController POST create when not signed in should respond with a 401
     Failure/Error: response.response_code.should == 401
       expected: 401
            got: 302 (using ==)
     # ./spec/controllers/talks_controller_spec.rb:53:in `block (4 levels) in <top (required)>'

Je ne suis pas sûr exactement ce qu'il se passe. Est-il un moyen que je puisse le tester pour le code de la réponse renvoyée au navigateur? Ou une meilleure façon que je puisse tester l'autorisation?

Vous pourriez essayer de changer les spécifications de lire post :create, :format => :json et voir si cela aide.
Merci pour la suggestion! Malheureusement, j'obtiens toujours la même 302 code après l'ajout de l' :format => :json.
Avez-vous regardé le journal de test?

OriginalL'auteur Matt McCormick | 2011-10-06