私はCanCanを使用して自分のリソースを承認するためのレールプロジェクトに取り組んでいます。ユーザーがサインインしていないときに、AJAXフォームの提出を介して「トーク」を提出しようとすると、CanCanは{"status":"error","message":"You must be logged in to do that!"}
という401を正しく生成します(私はfirebugを使ってブラウザでこれを確認しました)。RSpecを使用してCanCanの認証に失敗した応答コードをテストするにはどうすればよいですか?
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:しかし、私のテストでは401ではなく302レスポンスコードを取得[:話]割り当てられません。最初の例は、ここに含ま
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
が成功した(割り当てです)、2番目はそうではありません:
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)>'
私は何が起こっているのか分かりません。ブラウザに返される実際のレスポンスコードをテストできる方法はありますか?あるいは、私が認可をテストする良い方法は?
あなたは 'post:create、:format =>:json'を読むように仕様を変更してみてください。 – zetetic
提案をありがとう!残念ながら、私はまだ:format =>:jsonを追加した後、同じ302コードを取得します。 –
テストログを見ましたか? – zetetic