Ich habe ein Problem mit meiner Sitzung gespeichert return_to
URL in meinen Integrationstests.Sitzungsvariablen können nicht im Integrationstest in Schienen verwendet werden
Weil mein Controller kann aus verschiedenen Orten greift sein speichere ich den Referer in der Sitzung auf die neue Aktion und umleiten, um es in meiner Aktion erstellen.
cards_controller.rb:
class CardsController < ApplicationController
...
def new
@card = current_user.cards.build
session[:return_to] ||= request.referer
end
def create
@card = current_user.cards.build(card_params)
if @card.save
flash[:success] = 'Card created!'
redirect_to session.delete(:return_to) || root_path
else
render 'new', layout: 'card_new'
end
end
...
end
Da ich nur die Aktion in meinem Test erstellen verwenden mag ich das Session-Variable in dem Integrationstest setzen, wie ich in meinem Unit-Test tun, aber es funktioniert nicht. Ich werde immer zum Root-Pfad weitergeleitet.
cards_interface_test.rb:
class CardsInterfaceTest < ActionDispatch::IntegrationTest
test 'cards interface should redirect after successful save' do
log_in_as(@user)
get cards_path
assert_select 'a[aria-label=?]', 'new'
name = "heroblade"
session[:return_to] = cards_url
assert_difference 'Card.count', 1 do
post cards_path, card: { name: name, icon: 'white-book', color: 'indigo', contents: 'subtitle | Rogue feature'}
end
assert_redirected_to cards_url
follow_redirect!
assert_match name, response.body
assert_select 'td', text: name
end
end
Der Test schlägt auf der assert_redirected_to
Linie fehl.
Ich versuchte zuerst get new_card_path
zu rufen, aber machte keinen Unterschied und jetzt bin ich ein bisschen verloren. Ich weiß nicht, ob das grundsätzlich funktionieren sollte, aber ich habe einen kleinen Fehler gemacht oder versucht, etwas komplett gegen die Best Practices zu unternehmen und sollte alle meine Interface-Tests so umgestalten, dass sie Selenium oder ähnliche Tools verwenden.
ich auch versucht, die Session-Variablen als Teil der Anforderung, wie die Schienen Führung bereitzustellen, beschreibt für Funktionstests ohne Effekte:
post cards_path, {card: { name: name, icon: 'white-book', color: 'indigo', contents: 'subtitle | Rogue feature' }}, {'return_to' => cards_url}
Gearbeitet, thx. Ich habe nicht darüber nachgedacht, dass ich den Referer explizit einstellen musste. –