2012-03-03 9 views
9

次のように私は私のリソースコントローラの削除アクションをテストしてい:RailsのRSpecで204応答をテストするにはどうすればよいですか?

describe ResourceController do 
    context "DELETE destroy" do 
    before :each do 
     delete :destroy, id: @resource.id 
    end 
    it { should respond_with(:no_content) } 
    end 
end 

私は204 /無コンテンツの応答を期待しています。しかし、このテストはサーバーから返される応答が406であるため、失敗しています。レスポンスは、私がRestテストクライアントから直接コントローラにヒットしたときの204です。

答えて

7

Thisページにレスポンスコードのテスト方法が示されています。

describe ResourceController do 
    context "DELETE destroy" do 
    it "should respond with a 204" 
     delete :destroy, id: @resource.id 
     response.code.should eql(204) 
    end 
    end 
end 
+0

構文は問題ありません。私はshouldaを使っていることを忘れていました。私は削除要求をするときにいくつかのヘッダを設定する必要があるのだろうかと思います。 –

+0

コントローラの内容を投稿してください。 – Gazler

+1

注:少なくともRails 4では 'response.code'は文字列なので、' response.code.should eql "204" 'や' response.response_code.should eql 204'を使うべきです。 http://api.rubyonrails.org/classes/ActionDispatch/Response.htmlを参照してください。 – Soup

4

数年が経過している...私はちょうどそれがexpect構文を使用すると、直接ステータスコードを照会することが可能であることに注意したい

describe ResourceController do 
    context "DELETE destroy" do 
    it "should respond with a 204" 
     delete :destroy, id: @resource.id 
     expect(response).to have_http_status(:no_content) 
    end 
    end 
end 
関連する問題