我有一个带有聊天功能的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更新了页面。 如果我重做了某个东西,那么测试就可以,但它会重新加载页面。
通过该测试的任何帮助或建议
答案 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}
而不是