[RUBY] Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 6. Zeigen Sie, erstellen Sie die Implementierung

Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 5-Controller, Routenimplementierung

Testimplementierung anzeigen

In Anlehnung an den vorherigen Index werden wir Showtests und Controller implementieren. show ist das Verhalten beim Suchen und Zurückgeben basierend auf der ID des Parameters.

Geht es beim Test darum, eine Antwort normal und 404 zurückzugeben, wenn die ID nicht vorhanden ist?

spec/requests/v1/posts_controller.rb


...

+  describe "GET /v1/posts#show" do
+    let(:post) do
+      create(:post, subject: "Test zeigen")
+    end
+    it "Der normale Antwortcode wird zurückgegeben" do
+      get v1_post_url({ id: post.id })
+      expect(response.status).to eq 200
+    end
+    it "Betreff wird korrekt zurückgegeben" do
+      get v1_post_url({ id: post.id })
+      json = JSON.parse(response.body)
+      expect(json["post"]["subject"]).to eq("Test zeigen")
+    end
+    it "Die Antwort 404 wird zurückgegeben, wenn die ID nicht vorhanden ist" do
+      get v1_post_url({ id: post.id + 1 })
+      expect(response.status).to eq 404
+    end
+  end
...

Die Erklärung wurde weggelassen, aber es wird verzögert ausgewertet, wenn sie aufgerufen wird. Mit anderen Worten, es wird nicht ausgeführt, bis der variable Beitrag aufgerufen wird, sondern wird ausgeführt, wenn er aufgerufen wird.

Im obigen Beispiel wird es erstellt, wenn es im it-Block post.id heißt. Natürlich ist der Controller nicht implementiert, daher ist der Test Moos.

Umsetzung der Show

app/controllers/v1/posts_controller.rb


...
     def show
-      # TODO
+      render json: { post: @post }
     end
...

Zwei der drei hinzugefügten Tests bestehen den 404-Fehlertest nicht. Ich erhalte eine RecordNotFound-Ausnahme in Rails und eine Nicht-JSON-Antwort.

Ändern Sie application_controller.rb, die die Superklasse aller Controller ist.

app/controller/application_controller.rb


 # frozen_string_literal: true

 #
 #Superklasse von Controller
 #
 class ApplicationController < ActionController::API
+  rescue_from ActiveRecord::RecordNotFound, with: :render_404


+  def render_404
+    render status: 404, json: { message: "record not found." }
+   end
 end

Wenn Sie wie oben beschrieben antworten, wird eine Ausnahme "Datensatz nicht gefunden" (ActiveRecord :: RecordNotFound) ausgelöst und "render_404" ausgeführt. Und json wird mit dem 404-Antwortcode "status: 404" zurückgegeben.

Wenn Sie es bisher implementieren, besteht der Test. Nur für den Fall, lassen Sie es uns mit Curl überprüfen.

$ curl localhost:8080/v1/posts/0
{"message":"record not found."}
$ curl localhost:8080/v1/posts/1
{"post":{"id":1,"subject":"hoge","body":"fuga","created_at":"2020-09-05T13:50:01.797Z","updated_at":"2020-09-05T13:50:01.797Z"}}

Implementierung des Erstellungs-Tests

Da beim Erstellen ein neuer Datensatz erstellt wird, stellen Sie sicher, dass er um eins erhöht wird, dass der inkrementierte Datensatz mit der Zeit übereinstimmt, zu der er registriert wurde, und dass er nicht erstellt werden kann, wenn die Parameter falsch sind.

spec/requests/v1/posts_controller.rb


+  describe "POST /v1/posts#create" do
+    let(:new_post) do
+      attributes_for(:post, subject: "create_Probandentest", body: "create_Körpertest")
+    end
+    it "Der normale Antwortcode wird zurückgegeben" do
+      post v1_posts_url, params: new_post
+      expect(response.status).to eq 200
+    end
+    it "Ein weiterer Fall wird zurückgesandt" do
+      expect do
+        post v1_posts_url, params: new_post
+      end.to change { Post.count }.by(1)
+    end
+    it "subject,Körper kehrt korrekt zurück" do
+      post v1_posts_url, params: new_post
+      json = JSON.parse(response.body)
+      expect(json["post"]["subject"]).to eq("create_Probandentest")
+      expect(json["post"]["body"]).to eq("create_Körpertest")
+    end
+    it "Fehler werden zurückgegeben, wenn der Parameter ungültig ist" do
+      post v1_posts_url, params: {}
+      json = JSON.parse(response.body)
+      expect(json.key?("errors")).to be true
+    end
+  end

Wenn Sie attribute_for verwenden, wird das Objekt zurückgegeben, ohne wie in build in der DB gespeichert zu werden. Zu diesem Zeitpunkt wird es als einfaches Objekt anstelle des ActiveRecord-Formats zurückgegeben. Dies ist praktisch, da zum Zeitpunkt der Veröffentlichung keine unnötigen Spalten wie id, created_at, update_at vorhanden sind.

Achten Sie zu diesem Zeitpunkt darauf, den Variablennamen nicht in "post" zu ändern. Zum Zeitpunkt des Schreibens des Artikels habe ich ihn "post" gemacht und er wurde zu "post v1_posts_url, params: post", und der Beitrag von get und post wurde überschrieben und der Test funktionierte nicht richtig ... Die Lösung dauerte lange: sweat_smile:

expect do post v1_posts_url, params: new_post end.to change { Post.count }.by(1) Dieser Block ist ein Test, bei dem Post.count durch Posten um 1 erhöht wird. Der Punkt ist, dass Expect ein Block anstelle von "Expect.to Gl." Ist.

Implementierung von erstellen

Controller implementieren.

app/controllers/v1/posts_controller.rb


...

     def create
-      # TODO
+      post = Post.new(post_params)
+      if post.save
+        render json: { post: post }
+      else
+        render json: { errors: post.errors }
+      end
    end
...
$ curl localhost:8080/v1/posts -X POST -H 'Content-Type: application/json' -d '{"subject":"moge","body":"hoge"}'        
{"post":{"id":3,"subject":"moge","body":"hoge","created_at":"2020-09-06T10:31:38.375Z","updated_at":"2020-09-06T10:31:38.375Z"}}

Wenn rubocop und rspec normal funktionieren, legen Sie fest.

Ich habe es als Referenz in diesem Artikel verwendet. Vielen Dank. Referenz: Super einfache API mit Schienen

Fortsetzung

Erstellen einer Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6 # 7-Update, Implementierung zerstören

[Zur Serialisierungstabelle]

Recommended Posts

Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 6. Zeigen Sie, erstellen Sie die Implementierung
# 8 Seed-Implementierung zum Erstellen einer Bulletin Board-API mit Zertifizierungsautorisierung in Rails 6
Erstellen Sie eine Bulletin Board-API mit Zertifizierungsberechtigung im Rails 6 # 7-Update und zerstören Sie die Implementierung
# 16 Richtlinieneinstellung zum Erstellen einer Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6
Einführung des Serializers Nr. 9 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung im Rails 6 # 5-Controller und leiten Sie die Implementierung weiter
Einführung von # 10 devise_token_auth zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6
Einführung des Experten Nr. 15 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
Erstellen Sie eine Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6 # 13 Grant-Authentifizierungsheader
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 17. Fügen Sie Administratorrechte hinzu
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 14 Seed. Anzeige der Ausführungszeit
Erstellen Sie mit Rails 6 # 18 eine Bulletin-Board-API mit Zertifizierung und Autorisierung. ・ Implementierung des Endbenutzer-Controllers
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 12 Assoziation von Benutzer und Beitrag
Erstellen Sie eine Bulletin-Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 1 Environment Construction
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 11. Benutzermodelltest und Validierung hinzugefügt
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 2 Einführung in Git und Rubocop
# 4 nach Validierung und Testimplementierung zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 3 RSpec. FactoryBot wird eingeführt und ein Post-Modell erstellt
Versuchen Sie, ein Bulletin Board in Java zu erstellen
So erstellen Sie eine API mit GraphQL und Rails
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
Ich habe versucht, die Rails-API mit TDD von RSpec zu implementieren. Teil3-Aktionsimplementierung mit Authentifizierung
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, die Rails-API mit TDD von RSpec zu implementieren. Teil1-Aktionsimplementierung ohne Authentifizierung-
So erstellen Sie eine Rails 6-Umgebung mit Docker
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
So erstellen Sie einfach ein Pulldown mit Rails
[Rails] So erstellen Sie eine Umgebung mit Docker
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
[So fügen Sie ein Video mit Rails in haml ein]
Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
Abfragen von Arrays in jsonb mit Rails + postgres
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Erstellen Sie eine API-Schlüsselauthentifizierung für die Web-API in Spring Security
Neuer Mitarbeiter hat versucht, mit Spring Security eine Authentifizierungs- / Autorisierungsfunktion von Grund auf neu zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Implementierungsrichtlinie zum dynamischen Speichern und Anzeigen der Zeitzone in Rails
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Eine Reihe von Schritten zum Erstellen von Ergebnissen für Portfolios mit Rails
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
So richten Sie einen Proxy mit Authentifizierung in Feign ein
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0