Ich teste eine App in Rails und mit einem Fehler kann ich nicht herausfinden. Ich habe eine Tabelle namens "Familien" mit grundlegenden CRUD-Funktionalität. Wenn beim Erstellen einer neuen "Familie" in der neuen Ansicht der Titel nicht validiert wird, sollte die neue Ansicht erneut gerendert werden. Und es ist. Aber die URL ändert sich von "Familien/neu" zu "Familien". Die Ansicht und die URL stimmen nicht überein. Und mein Test scheitert als Ergebnis. Warum passiert das in meiner URL? Hier ist mein Test:Rails URL ändert sich ohne Änderung der Ansicht
require 'rails_helper'
feature "Creating a family" do
scenario "A user creates a family with invalid title" do
visit '/'
click_link 'Create Family'
click_button "Create"
expect(page.current_path).to eq(new_family_path)
end
end
Hier sind die neuen und erstellen Aktionen in meinem Controller:
def new
@family = Family.new
end
def create
@family = Family.new(family_params)
if @family.save
redirect_to root_path
else
flash.now[:danger] = "There was a problem"
render :new
end
end
Familienmodell:
class Family < ApplicationRecord
validates :title, presence: true
end
Die Antworten haben darauf hingedeutet, was Sie sehen, ist normales Verhalten von Schienen, jedoch sollten Sie niemals 'current_path' mit dem' eq'-Matcher verwenden, da es Capybaras Warten auf Wiederholungsversuche verhindert. Verwenden Sie stattdessen den 'have_current_path'-Matcher -' expect (page) .to have_current_path (new_family_path) '. Es erhöht die Teststabilität erheblich, wenn Sie zu einem JS-fähigen Treiber wechseln. –