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.
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.
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.
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