[英]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.