Как войти в систему в тестах RefineryCMS?
Я разрабатываю собственный контроллер в refineryCMS, который находится в корне приложения
class ExchangeController < ApplicationController
def exchange
end
end
Он работает нормально, но чтобы его протестировать, мне нужно войти в систему пользователя на нефтеперерабатывающем заводе, как это
describe "Exchange action" do
login_refinery_user
it 'should return a 200' do
get '/exchange'
response.code.should == '200'
end
end
Но это просто не работает:( (неопределенная локальная переменная или метод `login_refinery_user') Без вызова этого метода входа, который я получаю Не удалось найти таблицу'refinery_roles'
Может ли кто-нибудь указать мне правильное направление?
3 ответа
Для Refinery 2 все, что нужно, это следующие строки в spec / support / devise.rb:
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
config.extend ::Refinery::Testing::ControllerMacros::Authentication, :type => :controller
config.extend ::Refinery::Testing::RequestMacros::Authentication, :type => :request
end
Теперь "login_refinery_user" будет доступен вместе с другими помощниками с https://github.com/resolve/refinerycms/blob/master/testing/lib/refinery/testing/controller_macros/authentication.rb и https://github.com/resolve/refinerycms/blob/master/testing/lib/refinery/testing/request_macros/authentication.rb
Вот как я делаю это с 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
В вашем файле factories.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
Что помогло мне, так это убедиться, что вы добавили имя вашего плагина / движка в список плагинов, к которым в данный момент имеет доступ авторизованный пользователь:
refinery_login_with :refinery_user
before do
logged_in_user.plugins = logged_in_user.plugins | %w(<plugin name>)
end