ruby-on-rails - sheet - factory bot rails tutorial
Cómo pasar parámetros a través de la cadena de asociaciones en FactoryGirl (1)
Por defecto, FactoryGirl llama a las fábricas de asociaciones para crearlas. Puedo pasar una asociación para una fábrica como parámetro. Pero, ¿cómo puedo pasar un objeto que debería usarse en lo profundo de la cadena de asociaciones?
Por ejemplo:
Tengo una publicación, que tiene un PostsManager, que tiene una cuenta, que pertenece a current_user.
Cuando hago una Factory(:post)
, crea un PostsManager, que crea una Cuenta, que no pertenece al usuario actual (stubed).
Por lo tanto, en las especificaciones que utilizan la fábrica de correos tengo que hacer:
account = Factory(:account, user: current_user)
post_manager = Factory(:post_manager, account: account)
post = Factory(:post, post_manager: post_manager)
Lo que me gustaría hacer es llamar a la fábrica con Factory(:post, user: current_user)
, y luego pasar current_user
través de las asociaciones a la fábrica de cuentas. ¿Hay una manera de hacerlo así?
No estoy seguro de qué versión de FactoryGirl está utilizando, pero si está en una versión reciente (2.6+), puede usar Atributos Transitorios (lea más en su página "Cómo empezar" ). Podrías hacer algo como esto:
FactoryGirl.define do
factory :post do
ignore do
user nil
end
posts_manager { FactoryGirl.build(:posts_manager, :user => user) }
end
factory :posts_manager do
ignore do
user nil
end
account { FactoryGirl.build(:account, :user => user) }
end
factory :account do
user { user }
end
end
FactoryGirl.create(:post, :user => current_user)