Wie kann ich in einem Rails-Komponententest ein User-Fixture dazu bringen, das zugehörige Profil zu laden?

7

In der Dokumentation zu Fixtures ( Ссылка ) wird das folgende Beispiel für die Verwendung von Labelreferenzen für Assoziationen angegeben:

%Vor%

Dem Beispiel folgend habe ich ein Benutzermodell mit has_one: profile, einem Profilmodell, das zu to_to: user gehört und versucht, Fixtures nach ihrem Beispiel einzurichten:

%Vor%

(Hinweis: Da meine Zuordnung in einer Richtung ist, hat das Benutzer-Fixture keine "profile: reginalds_profile" -Zusammensetzung - das Einfügen verursacht einen Fehler, weil die SQL-Tabelle kein profile_id-Attribut hat.)

Das Problem ist, in meinen Unit Tests scheint alles korrekt zu laden, aber Benutzer (: reginald) .profile ist immer Null. Was vermisse ich?

    
MikeJ 25.03.2010, 19:42
quelle

2 Antworten

18

Basierend auf Tadmans Vorschlag habe ich ein wenig mehr gesucht und die Antwort woanders auf dieser Seite gefunden, also könnte ich es genauso gut posten.

Siehe Beitrag mit dem Titel Automatische Assoziationen in Ruby on rails fixtures

Scheinbar findet die Art, wie Rails zugeordnete Fixtures findet, wenn Sie Labels (Benutzer: reginald) anstelle von IDs (user_id: 1) verwenden, durch Hashing des Namens und unter der Annahme, dass der Hash die ID ist. Wenn Sie die ID auf einen bestimmten Wert setzen, schlägt dies fehl. Wenn Sie jedoch zulassen, dass Rails automatisch IDs zuweist, wird dieses Hash-Schema verwendet. So fehlt der Dokumentation für Fixture Association Labels ein Schlüssel-Tidbit - wenn Sie Labels verwenden, müssen Sie vermeiden, dass Sie Ihre eigenen IDs in den Fixtures anwenden, die abgeglichen werden sollen. Fixtures, die nicht mit Labels übereinstimmen, können immer noch das von Ihnen gewählte ID-Schema haben.

    
MikeJ 26.03.2010, 00:49
quelle
2

Sie müssen möglicherweise deklarieren, dass Sie alle diese Fixtures laden, da ich nicht glaube, dass der Fixture Loader solchen Assoziationen automatisch folgt. In einigen Fällen müssen Sie möglicherweise mehr tun als einfach:

%Vor%

Jede einzelne deklariert:

%Vor%     
tadman 25.03.2010 19:56
quelle