[RUBY] Wände von der ersten Rspec getroffen

Einführung

Ich beschloss schließlich, an Rspec zu arbeiten. Es scheint, dass Sie damit verschiedene Tests durchführen können. Es ist wunderbar. Da es jedoch etwas schwierig zu sein schien, entschied ich mich für Online-Unterrichtsmaterialien. Dies ist Take off Rails.

https://freelance.cat-algorithm.com/lp/take-off-rails

Ich hatte heutzutage nicht genug Zeit, also musste ich die Dinge rationalisieren. Es ist eine Form, Zeit mit Geld zu kaufen, was sehr gut war. Die Informationen werden aggregiert und ich fragte, ob ich nicht verstanden habe.

Trotzdem hatte ich große Probleme, deshalb schreibe ich es hier.

Schienen g Modellbenutzer können nicht ausgeführt werden

Dieses Mal, um spec / models / user_spec.rb und spec / factories / users.rb für das vorhandene Benutzermodell zu erstellen,

$ rails g model user -s

Versucht zu rennen. Es ist jedoch ein Fehler aufgetreten.

$ rails g model user -s
Running via Spring preloader in process 1605
      invoke  active_record
The name 'User' is either already used in your application or reserved by Ruby on Rails. 
Please choose an alternative or use --force to skip this check and run this generator again.

Anscheinend war die Überspringoption nicht verfügbar. Ich habe eine Frage gestellt, alle geänderten Dateien festgeschrieben, dann "$ Rails g Model User --force" ausgeführt und "$ git restore" ausgeführt. Auf diese Weise wurde der gleiche Effekt wie beim Überspringen erzielt.

Fehler, der unter der URL des Geräts und der normalen Aktion leidet

Beim Versuch, die Erstellungsaktion des Benutzercontrollers zu testen, wurde der folgende Fehler angezeigt.

Failures:
  1) Users POST /Benutzer können Benutzerdatensätze erstellen
     Failure/Error: expect{subject }.to change { User.count }.by(1)
       expected `User.count` to have changed by 1, but was changed by 0
     # ./spec/requests/users_spec.rb:53:in `block (3 levels) in <main>'

Als ich nach der Ursache suchte, stellte ich fest, dass sie nicht zur Aktion # create user überging. Stattdessen wurde die # create-Aktion von devise ausgeführt.

Als ich mit $ Rails Routen nachgesehen habe, waren die Pfade von Devise # Controller und User # Controller gleich. Ich muss das ein wenig ändern.

Es wurde wie folgt eingestellt.

config/routes.rb


Rails.application.routes.draw do
  root to: 'users#index'
  devise_for :users
  resources :users ,path_names: { create: 'make' } do
    resources :plants do
      resources :growth_records, shallow: true
    end
  end
  
  scope 'username' do
    resources :users, only: [:create]
  end

end

Dieses Mal habe ich den Teil von scope geändert. Dadurch wurden Routing-Konflikte beseitigt. Ein Teil des Tests sieht folgendermaßen aus:

RSpec.describe "Users", type: :request do
#Unterlassung-----
  describe "POST /users" do
    subject { post('/username/users' ,params: params) }
    let(:params){ {user: attributes_for(:user)} }

    it "Kann Benutzerdatensätze erstellen" do
      expect{subject }.to change { User.count }.by(1)
      expect(response).to have_http_status(204)
    end
  end
#Unterlassung-----
end

Der vorherige "Beitrag (Benutzerpfad, Parameter: Parameter)" wurde in "Beitrag (" / Benutzername / Benutzer ", Parameter: Parameter) geändert.

Ende

Die Welt von Rspec ist tief. Im Moment bin ich mir nur bewusst, dass ich keine Fehler bekomme, aber ich möchte selbst darüber nachdenken, "welche Tests benötigt werden und wie viel".

Programmieren macht schließlich Spaß.

Recommended Posts

Wände von der ersten Rspec getroffen
Spring Boot zum ersten Mal
Spring AOP zum ersten Mal
Einführung in Java zum ersten Mal # 2
Zum ersten Mal Java lernen [Einführung]
Android Studio-Entwicklung zum ersten Mal (für Anfänger)
Ich habe zum ersten Mal versucht, Docker zu berühren
Zum ersten Mal lernen Java # 3 Ausdrücke und Operatoren
Lernnotiz beim ersten Lernen von Java (persönliches Lernnotiz)
Wie man Kotlin zum ersten Mal studiert ~ Teil 2 ~
Wie man Kotlin zum ersten Mal studiert ~ Teil 1 ~
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
Erstmaliges Modellieren von Digimon mit DDD Teil 1
Denken Sie daran, wenn Rails (Turbolinks) die Seite nicht zum ersten Mal lädt
Zum ersten Mal Kotlin berühren - Enum Classes
[Erstes Java] Machen Sie etwas, das vorerst mit Intellij funktioniert
Die Geschichte der ersten Veröffentlichung der Android-App im Play Store.
[Socket-Kommunikation (Java)] Eindrücke von der erstmaligen Implementierung der Socket-Kommunikation in der Praxis
Erstellen einer App und erstmaliges Bereitstellen mit heroku
Erste Programmierung in meinem Leben Java 1st Hello World
Verwenden Sie die Methode l für die Zeitnotation
Die Geschichte, absichtlich zum ersten Mal in meinem Leben Try Catch zu verwenden
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
Eine Geschichte über einen Super-Anfänger, der zum ersten Mal am AtCoder-Wettbewerb teilnimmt (AtCoder-Anfängerwettbewerb 140)
Formatieren Sie das von created_at angegebene Datum und die Uhrzeit
Installieren Sie vorerst Amazon Corretto (Vorschau)
Verwenden Sie vorerst eine externe Java-Bibliothek
Führen Sie jetzt Dataflow, Java, Streaming aus
[Android Studio / Java] Was Sie nicht verstehen, wenn Sie es zum ersten Mal berühren
Holen Sie sich den Anime-Namen für diesen Begriff durch Scraping
Versuchen Sie vorerst, Spring Cloud Config auszuführen
[Erster Beitrag] Geben Sie das Wort Ausverkauft für verkaufte Produkte aus
Anmeldeinformationen, auf die das AWS SDK für Java standardmäßig verweist
Befehl, um Docker vorerst zu verwenden
Zusammenfassung der Punkte, die Java-Programmierer beim ersten Lesen der Kotlin-Quelle als rutschig empfinden