J'ai finalement décidé de commencer à travailler sur Rspec. Il semble que vous puissiez faire divers tests en utilisant cela. C'est incroyable. Cependant, cela semblait un peu difficile, alors j'ai décidé d'utiliser du matériel pédagogique en ligne. C'est Take off Rails.
https://freelance.cat-algorithm.com/lp/take-off-rails
Je n'ai pas eu assez de temps ces jours-ci, alors j'avais besoin de rationaliser les choses. C'est une forme de gain de temps avec de l'argent, ce qui était très bien. Les informations sont agrégées et j'ai demandé si je ne comprenais pas.
Même ainsi, j'ai eu beaucoup de problèmes, alors je vais l'écrire ici.
Cette fois, pour créer spec / models / user_spec.rb
et spec / factories / users.rb
pour le modèle utilisateur existant,
$ rails g model user -s
J'ai essayé de courir. Cependant, une erreur s'est produite.
$ 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.
Apparemment, l'option de saut n'était pas disponible. J'ai posé une question, j'ai validé tous les fichiers modifiés, puis j'ai fait $ rails g model user --force
et j'ai lancé $ git restore .
. En faisant cela, le même effet que le saut a été obtenu.
Lorsque j'ai essayé de tester l'action de création du contrôleur utilisateur, j'ai eu l'erreur suivante.
Failures:
1) Users POST /les utilisateurs peuvent créer des enregistrements d'utilisateurs
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>'
Lorsque j'ai recherché la cause, j'ai constaté qu'elle ne passait pas à l'action user # create. Au lieu de cela, l'action #create de devise était en cours d'exécution.
Quand j'ai vérifié avec $ rails routes
, les chemins du contrôleur de commande et de l'utilisateur # contrôleur étaient les mêmes. Je dois changer cela un peu.
Il a été défini comme suit.
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
Cette fois, j'ai changé la partie de scope
. Cela a éliminé les conflits de routage. Une partie du test ressemble à ceci:
RSpec.describe "Users", type: :request do
#Omission-----
describe "POST /users" do
subject { post('/username/users' ,params: params) }
let(:params){ {user: attributes_for(:user)} }
it "Peut créer des enregistrements d'utilisateurs" do
expect{subject }.to change { User.count }.by(1)
expect(response).to have_http_status(204)
end
end
#Omission-----
end
Le précédent post (users_path, params: params)
a été changé en post ('/ username / users', params: params)
.
Le monde de Rspec est profond. À l'heure actuelle, je suis seulement conscient de ne pas avoir d'erreurs, mais je veux réfléchir à "quels tests sont nécessaires et combien" par moi-même.
Après tout, la programmation est amusante.
Recommended Posts