这就是我使用 Refinery 1.0.9 的方式,可能需要针对 Refinery 2 进行调整
创建一个名为“controller_macros.rb”的文件并将其放在 spec/support/refinery/ 下
在 controller_macros.rb 中定义 login_refinery_user
module Refinery
module ControllerMacros
def login_refinery_user
before (:each) do
@refinery_user = Factory(:refinery_user)
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in @refinery_user
end
end
end
end
在您的 factory.rb 文件中确保您有以下两个工厂
factory :user do
sequence(:username) { |n| "person#{n}" }
sequence(:email) { |n| "person#{n}@cucumber.com" }
password "greenandjuicy"
password_confirmation "greenandjuicy"
end
factory :refinery_user, :parent => :user do
roles { [ Role[:refinery] ] }
after_create do |user|
Refinery::Plugins.registered.each_with_index do |plugin, index|
user.plugins.create(:name => plugin.name, :position => index)
end
end
end
在您的 spec_helper.rb 文件中,将控制器宏模块包含到您的控制器测试中,并确保您有 Devise 测试助手
RSpec.configure do |config|
config.include ::Devise::TestHelpers, :type => :controller
config.extend ::Refinery::ControllerMacros, :type => :controller
end