Rails: Fabriken und Verbände in Funktionstests
-
21-09-2019 - |
Frage
Ich versuche, herauszufinden, warum funktioniert das nicht.
Angenommen, Sie haben drei Modelle, Benutzer, Foo und Bar. Damit eine Bar den Benutzer erstellt werden soll, muss zuerst ein foo-Objekt erstellen und validieren.
Class User #snip!
has_many :foos
has_many :bars
Class Foo #snip!
belongs_to :user
has_many :bars
Class Bar #snip!
belongs_to :user
belongs_to :foo
Ich versuche, einen Funktionstest zum Laufen zu bringen, wo, wenn der Benutzer versucht, eine neue Bar zu machen, ohne einen gültig foo hat, sie für ein Foo zu der „neuen“ Aktion weitergeleitet.
Ich habe kein Problem mit dem Umleitungsszenario hat. Allerdings, wenn ich ein Benutzer-Setup mit einem gültigen Foo Objekt versuchen und versuchen, die „neue“ Aktion für eine Bar zu bekommen, wird es nach wie vor zu der „neuen“ Aktion des Foo-Controller weitergeleitet. Es ist immer noch nicht erkennen an, dass die Nutzer ein Foo hat.
Hier ist mein Controller:
class BarsControllerTest < ActionController::TestCase
setup :activate_authlogic
def setup
@request.env['HTTPS'] = nil
@user = Factory.build(:user)
@foo = Factory.build(:foo, :user => @user)
end
test "should get new when user has a valid foo" do
@request.env['HTTPS'] = 'on'
UserSession.create(@user)
get :new
assert_response :success
end
Dies ist die Umleitung Funktion, die ich in meiner Anwendung Controller habe, die in meinem Bar-Controller genannt wird:
def foo_required
if current_user && @current_user.foos.valid.empty? && @current_user.foos.empty?
flash[:notice] = "You must have a verified foo in order to create a Bar!"
redirect_to new_foo_path
elsif current_user && @current_user.foos.valid.empty?
flash[:notice] = "You must verify your foos in order to create a Bar!"
redirect_to foos_path
end
end
Hier ist die Foo Factory:
Factory.define :foo do |f|
#attributes
f.valid true
f.association :user
end
Stattdessen werde ich umgeleitet „ https://test.host:80/foos/new“der Controller nicht anerkennt, dass der Benutzer hat eine Foo ...
Die Sitzung gilt so dass diese wie eine Fabrik Problem scheint, aber ich bin nicht sicher, was es ist.
Lösung
Ich gehe davon aus, dass dieser factory_girl ist. Sie rufen Factory.build
, die nicht in die Datenbank speichern etwas tut, so dass Sie nie für Ihren Verein benötigt, um den Fremdschlüsselwert haben. Schalten Sie diejenigen Factory.create
und Sie sollten einen Unterschied sehen.