controller specs
Dies ist ein Artikel über.
Als ich die Variablen für die Gemeinsamkeit definierte, beschloss ich, sie als Memorandum beizubehalten, da sie überflutet wurden, wenn ich sie richtig benannte!
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 "Aktionen, für die keine Anmeldung erforderlich ist" do
.
.
.
end
context "Aktionen, für die eine Anmeldung erforderlich ist" do
let(:user) { FactoryBot.create(:user) }
let(:login_user) { login(user) }
let(:post) { FactoryBot.create(:post) }
let(:post_params) { FactoryBot.attributes_for(:post) }
describe "Aktion erstellen" do
context "Für angemeldete Benutzer" do
it "Erstellen Sie einen Beitrag" do
login user
expect {
post :create, params: { post: post_params }
}.to change(user.posts, :count).by(1)
end
end
context "Für Benutzer, die nicht angemeldet sind" do
.
.
.
end
end
end
end
Annahme ➡︎ Ich verwende FactoryBot, um Testdaten zu erstellen. (Post ist zugeordnet) ➡︎ Die Anmeldemethode (Benutzer) ist in der Datei rails_helper.rb für die Anmeldung definiert.
Failures:
1)PostsController Aktionen, für die eine Anmeldung erforderlich ist Aktion erstellen Für angemeldete Benutzer Erstellen Sie einen Beitrag
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>'
Die Anzahl der Argumente auf dem Aufrufer (give) beträgt 2, und die Anzahl der Argumente auf der Methodenseite (erwartet) beträgt 0.
Mit anderen Worten, ich ärgere mich über die Tatsache, dass "zwei Argumente aufgerufen werden, aber es gibt kein entsprechendes Argument auf der Methodenseite".
post :create, params: { post: post_params }
Der Grund, warum diese Beschreibung einen Fehler verursacht, ist, dass der obige Teil " post: `` ", den ich als" `` Parameterschlüssel
übergeben sollte, tatsächlich der Schlüssel ist. Es wurde durch
verursacht, das als
`` Postvariable angesehen wurde, die definiert wurde, um Posts gemeinsam zu machen, nicht als.
Die beiden Gaves bedeuteten "
post:` "und"
post_params``` "...
Daher werde ich die Benennung der Post-Variablen `des Commoners so ändern, dass der Teil" post: "als Schlüssel erkannt werden kann.
`` `
spec/controllers/posts_controller_spec.rb
require 'rails_helper'
RSpec.describe PostsController, type: :controller do
context "Aktionen, für die eine Anmeldung erforderlich ist" do
let(:user) { FactoryBot.create(:user) }
let(:login_user) { login(user) }
- let(:post) { FactoryBot.create(:post) } #Löschen
+ let(:new_post) { FactoryBot.create(:post) } #Variablennamen ändern
let(:post_params) { FactoryBot.attributes_for(:post) }
describe "Aktion erstellen" do
context "Für angemeldete Benutzer" do
it "Erstellen Sie einen Beitrag" do
login user
expect {
post :create, params: { post: post_params }
}.to change(user.posts, :count).by(1)
end
end
end
end
end
Schreiben Sie die Post-Variable in die Variable new_post um.
$ bin/rspec spec/controllers
1 examples, 0 failures
Ich bestand!
Dieser Fehler gab mir das Gefühl, dass ich vorsichtig sein sollte, wenn ich Variablen benenne ... lol
https://qiita.com/yikegaya/items/98f0c12f5c25ee4731a1
Recommended Posts