使用Rspec destroy缺少此请求格式和变体的模板

时间:2018-06-18 20:58:09

标签: ruby-on-rails ruby rspec

我有一个带有聊天功能的Ruby on Rails应用程序。用户创建聊天和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更新了页面。 如果我重做了某个东西,那么测试就可以,但它会重新加载页面。

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

1 个答案:

答案 0 :(得分: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}实际请求的是show action

尝试delete :destroy, params: {id: Chat.last.id}而不是