Ich habe es in Kapitel 9 des Ruby on Rails Tutorials gemacht und eigene Funktionen hinzugefügt, um einen Benutzer bei der ersten Anmeldung zu sperren, so wie es ein Admin hat um ihre ID einzugeben und zu genehmigen ("entsperren"), bevor ein neuer Benutzer auf die Site zugreifen kann. Ich habe ein: locked boolean-Attribut hinzugefügt, das genau wie das admin-Attribut des User-Objekts funktioniert. Ich arbeite jetzt alles, aber ich habe Schwierigkeiten, einen einfachen Test dafür zu schreiben. Ich habe den folgenden Test user_pages_spec.rb, knapp unter der Hierarchie „Paginierung“ - „als Admin-Benutzer“:Test für neue Benutzersperrfunktion Ich schrieb für Rails Tutorial App
describe "as an admin user to unlock new users" do
let(:admin) { FactoryGirl.create(:admin) }
let(:locked_user) { FactoryGirl.create(:locked) }
before do
sign_in admin
visit users_path
end
it { should have_link('unlock', href: user_path(locked_user)) }
it { should_not have_link('unlock', href: user_path(admin)) }
end
und die Schaffung eines „gesperrt“ Benutzer zu unterstützen, hat dieses Bild factories.rb :
factory :locked do
locked true
end
ich, dass die Entriegelung Link zeigt sich manuell durch Firefox bestätigen kann, aber ich bin immer noch die folgende Versagen bekommen:
1) User pages index pagination as an admin user to unlock new users
Failure/Error: it { should have_link('unlock', href: user_path(locked_user)) }
expected link "unlock" to return something
# ./spec/requests/user_pages_spec.rb:64:in `block (5 levels) in <top (required)>'
ich interessiert bin), warum dies nicht zu wissen:), b ut auch b) wie man ein Problem wie dieses debuggt. Wie kann ich sagen, was der Test tatsächlich "sieht"? Ich habe rails-pry mit einem anderen Problem versucht, wie es von einem anderen stackoverflow-Benutzer vorgeschlagen wurde, aber in diesem Fall habe ich festgestellt, dass es nur von begrenztem Nutzen ist.
Alle Ideen oder Vorschläge würden sehr geschätzt werden. Danke im Voraus!
-Matt
Hallo Eric, nochmals vielen Dank für die Hilfe! Ich habe Ihren modifizierten Test oben in verschiedenen Teilen der Datei user_pages_spec.rb ausprobiert, und kein Glück. Auch nachdem ich den binding.pry Breakpoint gesetzt und dann page.body inspiziert habe, kann ich sehen, dass der Link "unlock" auf der Seite ist und locked_user korrekt ist. Ich frage mich, ob ich einen Link auf eine Weise erstelle, die das Testframework versteht. Hier ist der relevante Teil von _user.html.erb: '<% if current_user.admin? && user.locked? &&! current_user? (Benutzer)%> | <% = link_to "unlock", unlock_user_path (user), Methode:: get, confirm: "Neuen Benutzer aktivieren?" %> <% end %> ' – newton10471
versuchen Sie unlock_user_path (Benutzer) am Haltepunkt, um sicherzustellen, dass es das ist, was Sie erwarten. – EricM
Hier ist das Ergebnis: '[1] pry (#)> unlock_user_path (user) =>"/users/826/entsperren " [2] pry (# )>'. Ich habe auch die 'save_and_open_page' Methode von Capybara entdeckt und ausprobiert, die einen Webbrowser mit der fraglichen Seite an der fraglichen Stelle öffnet, und es zeigte die Seite, die ich erwartet hatte. Ich überlege, diesen Test aus der Datei user_pages_spec.rb zu entfernen und ihn in eine eigene Testdatei einzufügen, um ihn von allem anderen zu isolieren, das sich störend auswirken könnte. –
newton10471