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)>''