2012-08-06 15 views
0

我在Rails 3中使用respond_to和respond_with對來響應DELETE #destroy請求。銷燬操作在UsersController中定義。它銷燬params[:id]指定的用戶並使用JS模板進行響應。但是,請求在RSpec測試中仍然失敗,我不確定如何解決它。Rails的respond_with行爲已刪除的資源?

下面是我的UsersController片段:

class UsersController < ApplicationController 
    respond_to :html, only: [:index, :show, :new, :edit] 
    respond_to :js, only: [:create, :update, :delete] 
    ... 

    def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 

    respond_with @user 
    end 
end 

這裏是保持測試失敗:

require 'spec_helper' 

describe UsersController do 
    ... 

    describe "DELETE #destroy" do 
    before { @user = create(:user); delete :destroy, id: @user.id, format: :js } 

    it "return HTTP success" do 
     response.should be_success 
    end 

    it "respond with JS content" do 
     response.content_type.should == 'text/javascript' 
    end 
    end 
end 

測試「與JS的內容作出迴應」沒有成功,但是測試「迴歸HTTP成功「失敗。當我使用調試器來檢查response.code時,它是406.自從刪除成功後,我期待2xx。這是一個正常的Rails行爲還是我的代碼有問題?

回答

1

看起來你搞砸了REST delete和控制器的destroy。 Rails的響應一無所知:刪除的行爲,改變

respond_to :js, only: [:create, :update, :delete] 

respond_to :js, only: [:create, :update, :destroy] 

或塊傳遞到應答,而不是

respond_with @user 

使用

respond_with @user do |format| 
format.js 
end 
+0

謝謝你真是太棒了! – Andree 2012-08-06 08:37:41