Tôi đang sử dụng phát minh, rolify và cancan. Tôi cũng đang sử dụng rspec với FactoryGirl để thử nghiệm. Ngay bây giờ tôi đang làm việc trên một số thử nghiệm và tôi muốn xác định người dùng với vai trò khác nhau cho những thử nghiệm đó. Dưới đây là dự đoán hiện tại của tôi cho làm thế nào để làm điều đó bằng FactoryGirl:Thiết lập vai trò thông qua rolify trong FactoryGirl định nghĩa
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
Dưới đây là một số bài kiểm tra của tôi mà dường như không được viết một cách chính xác: require '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
Khi tôi chạy số kỹ thuật tôi đây là lỗi của tôi:
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)>'
Cảm ơn, tôi sẽ thử lần sau. Tôi đã chuyển sang phương pháp khác để xử lý vai trò người dùng. –
hoạt động như một sự quyến rũ! – SporkInventor
Câu trả lời hay! Nó hoạt động như bạn mong đợi. – Kulgar