Je viens d'ouvrir Factory_Girl et j'essaie de comprendre comment construire des usines dépendantes, la plupart des questions semblent désuètes en raison de la nouvelle version.Associations dans Factory Girl 4.0.0
J'utilise des associations, mais autres que la création de l'objet associé, cet objet ne semble pas être associé ou lié à l'objet principal de toute façon
est fondamentalement ici ce que j'ai
factory :computer do
serial_no "12345"
end
factory :allocation do
association :computer_id, factory: :computer
end
attribution appartient à l'ordinateur et l'ordinateur a_many allocations essentiellement une allocation est un enregistrement de chaque fois qu'un ordinateur est déplacé ou autre. Je ne suis pas sûr de ce que je fais mal, mais chaque fois que j'exécute cela, le ID_ordinateur de l'allocation est '1', mais l'ID de l'ordinateur est quelque chose de aléatoire (généralement un nombre compris entre 0 et 20), et alors mon test échoue parce qu'il ne peut pas trouver l'objet informatique approprié.
Editer: Comme si cela ne déroutait pas assez, le nom de classe actuel est Assignment, j'essayais simplement. Voici le code réel impliqué, le code réel n'a aucun problème car computer_id et user_id sont passés à la méthode create en tant que paramètres lors de la création.
describe "GET index" do
it "assigns assignments as @assignment" do
Assignment.any_instance.stubs(:valid?).returns(true)
assignment = FactoryGirl.create :associated_assignment
get :index, {}, valid_session
assigns(:assignments).should eq([assignment])
end
end
Les usines impliquées sont
factory :user do
fname "John"
lname "Smith"
uname "jsmith"
position "placeholder"
end
factory :computer do
asset_tag "12345"
computer_name "comp1"
make "dell"
model "E6400"
serial_no "abc123"
end
factory :associated_assignment, class: Assignment do
association :user_id, factory: :user
association :computer_id, factory: :computer
assign_date '11-11-2008'
end
Et le contrôleur est:
def index
@assignments = []
@computers = Computer.all
Computer.all.each do |asset|
@assignments << Assignment.where(:computer_id => asset.id).order("assign_date ASC").last
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @assignments }
format.xls { send_data @assignments.to_xls }
end
Au moment je cours ce test alternatif pour vérifier mes ids:
describe "GET index" do
it "assigns assignments as @assignment" do
Assignment.any_instance.stubs(:valid?).returns(true)
assignment = FactoryGirl.create :associated_assignment
get :index, {}, valid_session
assigns(:computers).should eq([assignment])
end
end
Qui revient donc mething à l'effet de ce qui suit, où l'ID de l'ordinateur est aléatoire mais computer_id d'affectation est toujours 1.
Failure/Error: assigns(:computers).should eq([assignment])
expected: [#<Assignment id: 12, user_id: 1, computer_id: 1, assign_date: "2008-11-11", created_at: "2012-09-10 23:59:48", updated_at: "2012-09-10 23:59:48">]
got: [#<Computer id: 14, serial_no: "abc123", asset_tag: 12345, computer_name: "comp1", make: "dell", model: "E6400", created_at: "2012-09-10 23:59:48", updated_at: "2012-09-10 23:59:48">]
Merci pour avoir éclairci ce point, mais je suis vraiment confus quant à ce point d'une association est maintenant si tout ce qu'elle produit de une usine qui n'a pas de relation garantie avec l'usine qui l'a appelée. – corodio8
La relation est garantie, mais pas l'id. Vous créez l'allocation avec l'usine et vous obtenez un ordinateur associé gratuitement. –
Qu'est-ce qui détermine exactement l'association? Dans mon cas, j'essaye de lier computer_id sur l'allocation avec l'identification sur l'usine (fonctionne bien dans le code réel), mais le computer_id est complètement indépendant de l'identification de l'ordinateur associé. – corodio8