Mettre en œuvre les 2 actions restantes, mettre à jour et détruire
la mise à jour est un processus de mise à jour. Si vous pouvez le créer, c'est similaire, donc il ne devrait pas rester bloqué.
spec/requests/v1/posts_controller.rb
...
+ describe "PUT /v1/posts#update" do
+ let(:update_param) do
+ post = create(:post)
+ update_param = attributes_for(:post, subject: "update_test du sujet", body: "update_test corporel")
+ update_param[:id] = post.id
+ update_param
+ end
+ it "Le code de réponse normal est renvoyé" do
+ put v1_post_url({ id: update_param[:id] }), params: update_param
+ expect(response.status).to eq 200
+ end
+ it "subject,le corps revient correctement" do
+ put v1_post_url({ id: update_param[:id] }), params: update_param
+ json = JSON.parse(response.body)
+ expect(json["post"]["subject"]).to eq("update_test du sujet")
+ expect(json["post"]["body"]).to eq("update_test corporel")
+ end
+ it "Des erreurs sont renvoyées lorsque le paramètre n'est pas valide" do
+ put v1_post_url({ id: update_param[:id] }), params: { subject: "" }
+ json = JSON.parse(response.body)
+ expect(json.key?("errors")).to be true
+ end
+ it "La réponse 404 est renvoyée lorsque l'ID n'existe pas" do
+ put v1_post_url({ id: update_param[:id] + 1 }), params: update_param
+ expect(response.status).to eq 404
+ end
+ end
...
Comme d'habitude, le contrôleur n'est pas implémenté, donc le test est de la mousse.
app/controllers/v1/posts_controller.rb
...
def update
- # TODO
+ if @post.update(post_params)
+ render json: { post: @post }
+ else
+ render json: { errors: @post.errors }
+ end
end
...
Il n'est pas non plus nécessaire d'en parler ici. Cela devrait passer le test.
spec/requests/v1/posts_controller.rb
...
+ describe "DELETE /v1/posts#destroy" do
+ let(:delete_post) do
+ create(:post)
+ end
+ it "Le code de réponse normal est renvoyé" do
+ delete v1_post_url({ id: delete_post.id })
+ expect(response.status).to eq 200
+ end
+ it "Un de moins et revient" do
+ delete_post
+ expect do
+ delete v1_post_url({ id: delete_post.id })
+ end.to change { Post.count }.by(-1)
+ end
+ it "La réponse 404 est renvoyée lorsque l'ID n'existe pas" do
+ delete v1_post_url({ id: delete_post.id + 1 })
+ expect(response.status).to eq 404
+ end
+ end
...
Contrairement à l'heure du courrier, confirmez que le nombre d'enregistrements est réduit de 1 dans le temple d'exécution. Comme un point, Cela signifie appeler delete_post avant de s'attendre.
Comme mentionné précédemment, let est évalué différé, donc s'il n'y a pas de delete_post avant expect, un enregistrement sera créé avec delete_post.id
dans expect et un enregistrement sera supprimé avec delete v1_post_url
. En d'autres termes, + 1-1 = 0 dans le bloc attendu et il n'y a aucun changement dans le nombre d'enregistrements.
Par conséquent, un enregistrement est créé avant expect et lorsque la suppression est exécutée dans expect, il devient -1 enregistrement.
app/controllers/v1/posts_controller.rb
...
def destroy
+ @post.destroy
+ render json: { post: @post }
end
...
C'est également très simple. Cette fois, c'est court, mais si vous incluez la graine à faire ensuite, ce sera trop long, alors c'est tout.
[Vers la table de sérialisation]
Recommended Posts