我在Rails 3中使用respond_to和respond_with对来响应DELETE #destroy请求。 destroy操作在UsersController中定义。它会销毁params[:id]
指定的用户并使用JS模板进行响应。但是,请求在RSpec测试中仍然失败,我不确定如何解决它。
这是我的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行为还是我的代码有问题?
答案 0 :(得分: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