Ich habe eine Schaltfläche "Freund hinzufügen" in Benutzerprofilseiten (Benutzer # anzeigen) und ich möchte testen, dass die Schaltfläche nicht auf Ihrer eigenen Profilseite (current_user istGehe zu Route in Helper-Spezifikationen in RSpec funktioniert nicht
)ich habe dies in der Ansichtsdatei (Benutzer/show.html.haml):
- unless current_user == params[:id]
= button_to 'Add friend', path
ich für sie einen Helfer erstellen möchten in UsersHelper
:
module UsersHelper
def correct_user
current_user == params[:id]
end
end
So in der Sieh es dir an:
Wie teste ich das in RSpec?
In meiner spec/helpers/users_helper_spec.rb
Datei ich habe:
it 'checks correct user' do
sign_in(user = create(:user))
user2 = create(:user, name: 'foobar')
get :show, params: { id: user2.to_param }
expect(helper.correct_user).to be true
end
Ich habe dies für die sign_in
(current_user) Entwickeln Helfer, die Zeichen in den Anwender:
RSpec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :helper
end
Grundsätzlich ist der Test fehlschlägt, weil get :show, params: { id: user2.to_param }
tun gibt mir einen Fehler und gibt mir den Eindruck, dass das Routing in Helfer-Spezifikationen nicht möglich ist.
Wie gehe ich testen correct_user
helper? Sollte ich es einfach auf den Controller verschieben (so kann ich get :show, params: { id: user2.to_param }
in der Spezifikation tun) und es dort testen? (Und machen es nur eine Hilfsmethode helper_method :correct_user
)
Dieses 'current_user == params [: id]' wird immer auswerten zu 'false', weil' current_user' wird ein Objekt und 'params sein [: id]' wird id eines Objekts. –
@JagdeepSingh Ja, ich habe meinen Code nicht angesehen, als ich die Frage geschrieben habe. Es ist tatsächlich 'current_user.to_param == params [: id]'. Aber Sie haben in Ihrer Antwort unten Recht, dass ich einfach das Benutzerobjekt ('@ user') verwenden soll, um es mit dem aktuellen Benutzer zu vergleichen. Vielen Dank! – puerile