tutorial rails factorybot bot ruby-on-rails rspec devise factory-bot

ruby on rails - rails - Estableciendo roles a través de rolify en la definición de FactoryGirl



rspec factories (1)

Prefiero usar FactoryGirls after(:create) callback para crear roles (también vea this problema para Rolify).

Además el método has_role? se usa para verificar si un usuario tiene un rol específico, para establecer un rol específico, debe usar el método add_role .

FactoryGirl.define do factory :user do name ''Test User'' email ''[email protected]'' password ''please'' password_confirmation ''please'' # required if the Devise Confirmable module is used confirmed_at Time.now factory :admin do after(:create) {|user| user.add_role(:admin)} end factory :curator do after(:create) {|user| user.add_role(:curator)} end factory :super_admin do after(:create) {|user| user.add_role(:super_admin)} end end end

Estoy usando el dispositivo, rolify y cancan. También estoy usando rspec con FactoryGirl para las pruebas. En este momento estoy trabajando en algunas pruebas y quiero definir usuarios con diferentes roles para esas pruebas. Aquí está mi conjetura actual sobre cómo hacer eso usando FactoryGirl:

FactoryGirl.define do factory :user do name ''Test User'' email ''[email protected]'' password ''please'' password_confirmation ''please'' # required if the Devise Confirmable module is used confirmed_at Time.now factory :admin do self.has_role :admin end factory :curator do self.has_role :curator end factory :super_admin do self.has_role :super_admin end end end

Estas son algunas de mis pruebas que no parecen estar escritas correctamente: requiere ''spec_helper''

describe "Pages" do subject { page } before do @newpage = FactoryGirl.create(:page) @newpage.save end context ''not logged in'' do it_behaves_like ''not admin'' end context ''logged in'' do context ''as user'' do before do @user = FactoryGirl.create(:user) sign_in @user end it_behaves_like ''not admin'' end context ''as curator'' do before do @curator = FactoryGirl.create(:curator) sign_in @curator end it_behaves_like ''not admin'' end context ''as admin'' do before do @admin = FactoryGirl.create(:admin) sign_in @admin end it_behaves_like ''admin'' end context ''as super admin'' do before do @super_admin = FactoryGirl.create(:super_admin) sign_in @super_admin end it_behaves_like ''admin'' end end end

Cuando ejecuto las especificaciones, estos son mis errores:

1) Pages logged in as admin behaves like admin can show page Failure/Error: Unable to find matching line from backtrace NoMethodError: undefined method `has_role='' for #<User:0x007f883384d178> Shared Example Group: "admin" called from ./spec/requests/pages_spec.rb:41 # ./spec/requests/pages_spec.rb:37:in `block (4 levels) in <top (required)>'' 2) Pages logged in as curator behaves like not admin can show page Failure/Error: Unable to find matching line from backtrace ArgumentError: Factory not registered: curator Shared Example Group: "not admin" called from ./spec/requests/pages_spec.rb:32 # ./spec/requests/pages_spec.rb:28:in `block (4 levels) in <top (required)>'' 3) Pages logged in as super admin behaves like admin can show page Failure/Error: Unable to find matching line from backtrace ArgumentError: Factory not registered: super_admin Shared Example Group: "admin" called from ./spec/requests/pages_spec.rb:50 # ./spec/requests/pages_spec.rb:46:in `block (4 levels) in <top (required)>''