【问题标题】:with Rspec destroy is missing a template for this request format and variant使用 Rspec destroy 缺少此请求格式和变体的模板
【发布时间】:2018-06-18 20:58:08
【问题描述】:

我有一个带有聊天功能的 Ruby on Rails 应用程序。用户创建一个聊天,ActionCable 更新用户端的页面。如果用户想删除 Chat,ActionCable 会在用户端删除 Chat。一切正常。但是如果我为此编写测试,则测试失败。 这是我的控制器。

  def destroy
    chat = Chat.find(params[:id])
    chat.comments.delete_all
    chat.likes.delete_all
    id = '#chat-to-delete-id'+chat.id.to_s
    chat.delete
    ActionCable.server.broadcast 'room_channel',
                                delete: id
  end

这是我的规范

  it 'delete a chat' do 
    sign_in(user)
    post :create, params: {chat:{body: 'hello'}}
    get :destroy, params: {id: Chat.last.id}
    expect(response.status).to eq (200)
  end

这是我在运行测试时遇到的错误。

ActionController::UnknownFormat: PublicationsController#destroy 是 缺少此请求格式和变体的模板

request.formats: ["text/html"] request.variant: []

注意!对于 XHR/Ajax 或 API 请求,此操作通常会响应 204 No Content:一个空白屏幕。由于您是在 Web 浏览器中加载它,我们假设您希望实际呈现一个模板,而不是什么都没有,所以我们显示一个错误是非常清楚的。如果您期望 204 No Content,请继续。这就是您将从 XHR 或 API 请求中获得的信息。试一试。

我不需要渲染或重定向某些内容,因为我使用 ActionCable 更新了页面。 如果我做 redirect_to 某事,测试没问题,但它会重新加载页面。

通过该测试的任何帮助或建议

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    如果您使用的是resources :chat 路由助手,那么默认情况下destroy 路由不会响应GET 请求。如果你运行rails routes,你会看到类似这样的内容

        chats GET    /chats(.:format)          chats#index
              POST   /chats(.:format)          chats#create
     new_chat GET    /chats/new(.:format)      chats#new
    edit_chat GET    /chats/:id/edit(.:format) chats#edit
         chat GET    /chats/:id(.:format)      chats#show
              PATCH  /chats/:id(.:format)      chats#update
              PUT    /chats/:id(.:format)      chats#update
              DELETE /chats/:id(.:format)      chats#destroy
    

    所以,您使用get :destroy, params: {id: Chat.last.id} 实际请求的是显示操作

    改用delete :destroy, params: {id: Chat.last.id}

    【讨论】:

    • 你写。有用。你不知道我寻找解决方案多久了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多