Como fazer uma solicitação de criação ou exclusão AJAX para um recurso aninhado em RSpec

Suponha que você tenha um recurso aninhado:

resources :photos do
resources
:likes, only: [:create, :destroy]
end

Digamos que, em sua visualização, clicar em um botão de curtir de uma foto acione uma
solicitação AJAX para o LikesController. <! – more -> A solicitação é createsemelhante se
o usuário ainda não curtiu a foto ou destroyé. Os urls devem ser assim
:

Verbo     | Ação    | Caminho

post     | create   | /photos/:photo_id/likes

delete| destroy|/photos/:photo_id/like/:id

Nesse caso, você precisa construir uma solicitação em suas especificações que tenha as
seguintes características:

  • ser uma solicitação AJAX;
  • ser um pedido POSTou DELETE;
  • conter a identificação com foto;
  • conter o id semelhante no caso de destroy.

Portanto, as createsolicitações serão mais ou menos assim:

xhr :post, :create, photo_id: photo.id

Onde:

  • xhrdiz RSpecpara fazer uma solicitação AJAX;
  • :post é o verbo do pedido;
  • :create é a ação do controlador;
  • photo_idé o id da foto em que o like deve ser criado. Isso pressupõe que você fabricou uma foto e a atribuiu à variável de instância photo.

A destroysolicitação será semelhante, mas você também deve fornecer o id:

xhr :delete, :destroy, photo_id: photo.id, id: like.id

Novamente, assume que você fabricou um semelhante e o atribuiu like.