controller specs
Ceci est un article sur.
Quand j'ai défini les variables pour les points communs, j'ai décidé de le garder comme mémorandum car il était submergé si je le nommais correctement!
ruby 2.6.5 rails 5.2.4.2 rspec 3.7 capybara 2.15 factory_bot_rails 4.11
spec/controllers/posts_controller_spec.rb
require 'rails_helper'
RSpec.describe PostsController, type: :controller do
context "Actions qui ne nécessitent pas de connexion" do
.
.
.
end
context "Actions nécessitant une connexion" do
let(:user) { FactoryBot.create(:user) }
let(:login_user) { login(user) }
let(:post) { FactoryBot.create(:post) }
let(:post_params) { FactoryBot.attributes_for(:post) }
describe "créer une action" do
context "Pour les utilisateurs connectés" do
it "Créer un post" do
login user
expect {
post :create, params: { post: post_params }
}.to change(user.posts, :count).by(1)
end
end
context "Pour les utilisateurs qui ne sont pas connectés" do
.
.
.
end
end
end
end
supposition ➡︎ J'utilise FactoryBot pour créer des données de test. (La publication est associée) ➡︎ La méthode de connexion (utilisateur) est définie dans le fichier rails_helper.rb pour la connexion.
Failures:
1)Actions du contrôleur qui nécessitent une connexion create Action Pour les utilisateurs connectés Créer une publication
Failure/Error: post :create, { post: post_params }
ArgumentError:
wrong number of arguments (given 2, expected 0)
# ./spec/controllers/posts_controller_spec.rb:85:in `block (5 levels) in <main>'
Le nombre d'arguments sur l'appelant (donner) est 2, et le nombre d'arguments côté méthode (attendu) est 0.
En d'autres termes, je suis en colère que "deux arguments soient appelés, mais il n'y a pas d'argument correspondant du côté de la méthode".
post :create, params: { post: post_params }
La raison pour laquelle cette description provoque une erreur est que la partie "post: ``
" ci-dessus que je devais passer en tant que `clé de paramètre
`est en fait la clé. Cela a été causé par
'', qui était considéré comme une `` '' variable de publication, définie pour rendre les publications communes, et non comme.
Les deux gaves signifiaient "
post:` "et"
post_params``` "...
Donc, je vais changer le nom de la
variable post '' du roturier afin que la partie "post:" puisse être reconnue comme une clé. `` ''
spec/controllers/posts_controller_spec.rb
require 'rails_helper'
RSpec.describe PostsController, type: :controller do
context "Actions nécessitant une connexion" do
let(:user) { FactoryBot.create(:user) }
let(:login_user) { login(user) }
- let(:post) { FactoryBot.create(:post) } #Effacer
+ let(:new_post) { FactoryBot.create(:post) } #Changer le nom de la variable
let(:post_params) { FactoryBot.attributes_for(:post) }
describe "créer une action" do
context "Pour les utilisateurs connectés" do
it "Créer un post" do
login user
expect {
post :create, params: { post: post_params }
}.to change(user.posts, :count).by(1)
end
end
end
end
end
Réécrivez la variable post dans la variable new_post.
$ bin/rspec spec/controllers
1 examples, 0 failures
J'ai réussi!
Cette erreur m'a fait sentir que je devais faire attention à nommer les variables ... lol
https://qiita.com/yikegaya/items/98f0c12f5c25ee4731a1
Recommended Posts