Как войти в систему в тестах 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
Другие вопросы по тегам