Тестирование придумать, пригласить

Я использую devise invitable в своем приложении. Я переписал контроллер приглашений devise invitable для некоторого пользовательского поведения. Когда я пытаюсь написать тест контроллера для этого, я получаю следующую ошибку:

NoMethodError: undefined method 'name' for nil:NilClass

Что происходит при выполнении get :new,

Маршрут настроен, как указано в направлениях настройки:

devise_for :users, controllers: { sessions: 'users/sessions', invitations: 'users/invitations', registrations: :registrations }

Контроллер находится в /app/controllers/users/invitations_controller.rb и имя правильно расположено в файле Users::InvitationsController то же самое с тестом /tests/controllers/users/invitations_controller.rb Users::InvitationsControllerTest

Это тест:

context '#new' do
  context 'while not signed in' do
    should 'redirect to the login page' do
      get :new
      assert_redirected_to new_user_session_path
    end
  end
end

Это действие:

def new
  self.resource = resource_class.new
  self.resource.build_group if current_inviter.is_admin?
  self.resource.group = current_inviter.group if current_inviter.is_manager?
  render :new
end

Спасибо за любую помощь, спасибо.

1 ответ

Вам нужно будет установить Devise.mappings перед каждым запросом (или в блоке настройки) следующим образом:

@request.env["devise.mapping"] = Devise.mappings[:user]

Это поможет правильно составить карту маршрутов в тестах.

Более подробную информацию можно найти здесь - https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)

Другие вопросы по тегам