0

我在 Rails 3 中使用 respond_to 和 respond_with 对来响应 DELETE #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 行为还是我的代码有问题?

4

1 回答 1

1

似乎你搞砸了 RESTdelete和控制器的destroy. Rails 响应者对 :delete action, change 一无所知

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
于 2012-08-06T07:40:35.107 回答