繁体   English   中英

与Rspec销毁缺少此请求格式和变体的模板

[英]with Rspec destroy is missing a template for this request format and variant

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

  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响应:白屏。 由于您是在网络浏览器中加载模板,因此我们假设您实际上希望渲染模板,而不是什么,因此我们显示的错误非常清楚。 如果您期望204 No Content,请继续。 这就是您从XHR或API请求中获得的。 试一试。

我不需要渲染或重定向某些内容,因为我使用ActionCable更新了页面。 如果我将redirect_to设置为某项,则测试正常,但会重新加载页面。

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

如果您使用resources :chat route helper,那么默认情况下, 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}请求是get :destroy, params: {id: Chat.last.id} show get :destroy, params: {id: Chat.last.id}

尝试delete :destroy, params: {id: Chat.last.id}代替

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM