Uncaught throw :warden даже с включенным Devise::TestHelpers

Я создаю Rails JSON API и пытаюсь написать тесты, чтобы гарантировать, что запросы без действительного auth_token будут встречаться со статусом 401.

Я включил тестовые хелперы Devise как в свой spec_helper.rb (config.include Devise::TestHelpers, type: :controller), так и в спецификацию моего контроллера (показано ниже). Я также устанавливаю @request.env['devise.mapping'] = Devise.mappings[:user] перед каждым тестом. Все мои тесты, в которых пользователь идентифицирован должным образом, работают нормально, но любые несанкционированные запросы приводят к:

 ArgumentError:
    uncaught throw :warden

Поскольку Devise удалила свою реализацию :token_authenticable, я адаптировал более безопасное решение, описанное здесь.

Также стоит отметить, что я использую гем rails-api, поэтому мой ApplicationController наследуется от ActionController::API, а не от Base.

Я обыскал Интернет и много-много вопросов о переполнении стека относительно этой ошибки и перепробовал все, что мог придумать, но безуспешно. Насколько мне известно, одних тестовых помощников Devise должно быть достаточно, так как они должны ловить :warden throws и выдавать соответствующий 401.

Мы будем очень признательны за любые предложения, которые вы все могли бы предоставить, и я могу изменить этот вопрос, указав более подробную информацию, если это необходимо. Спасибо!


person ZakThompson    schedule 05.09.2014    source источник
comment
Какие строки кода точно выдают ArgumentError?   -  person p4sh4    schedule 17.04.2015


Ответы (1)


Недавно у меня была такая же проблема, и я нашел тему на GitHub. На самом деле у меня еще не было возможности проверить ответ, который я получил, но я решил, что все равно предоставлю его вам - может быть, он сработает для вас.

https://github.com/plataformatec/devise/issues/1029#issuecomment-74778193

person jeffdill2    schedule 12.05.2015