Тестирование придумать, пригласить
Я использую 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)