Большинство моих тестов поднимают следующие вопросы, и я не понимаю почему. Вызов всех методов вызывает ошибку аутентификации. Я проверил код, есть ли метод под названием «аутентификация», но такого метода нет.
1) Admin::CommentsController handling GET to index is successful
Failure/Error: get :index
undefined method `authenticate!' for nil:NilClass
# ./spec/controllers/admin/comments_controller_spec.rb:9:in `block (3 levels) in <top (required)>'
124) PostsController handling GET for a single post should render show template
Failure/Error: get :show, :year => '2008', :month => '01', :day => '01', :slug => 'a-post'
undefined method `authenticate' for nil:NilClass
# ./app/controllers/application_controller.rb:18:in `set_current_user_for_model'
# ./spec/controllers/posts_controller_spec.rb:131:in `do_get'
# ./spec/controllers/posts_controller_spec.rb:140:in `block (3 levels) in <top (required)>'
Проект можно найти там => https://github.com/agilepandas/enki на тот случай, если вы захотите запустить тесты самостоятельно.
Я знаю, что вы используете Rspec, но вы можете столкнуться с той же проблемой с
Test::Unit
. Вам просто нужно добавить помощников тестирования devise вtest/test_helper.rb
источник
Приведенный выше ответ не сработал для меня (RSpec 3.1)
См. Https://stackoverflow.com/a/21166482/1161743 для решения, которое сработало для меня.
Перед настройкой переменных вам нужно будет выйти из системы анонимного пользователя:
источник
в RSpec
как упомянул Джеффри В., в своем ответе выше -> установить это для всех контроллеров:
однако, если это относится только к одной спецификации, вам не обязательно включать помощников разработки во все спецификации ваших контроллеров, вы можете просто явно включить этих помощников в один блок описания контроллера:
источник
У меня были такие же неудачи в одном из моих проектов. Он использует Ruby 2.0.0-p598, Rails 3.2.21, RSpec 2.99. Когда я проверил все спецификации вместе, возникла проблема. Когда я проверял спецификации по отдельности, они прошли. В мой spec / spec_helper.rb включено следующее:
Я добавил следующее к первому описанию в каждом неудачном файле спецификации. Это не решило проблему:
И не сделал:
Вдохновленный ответом на этот вопрос о переполнении стека, я провел вместе разные комбинации каталогов rspec, чтобы выяснить, какие из них могут мешать друг другу. В конце концов я обнаружил, что звоню:
когда я изменил все вхождения этого на:
Все спецификации прошли без сбоев:
Я надеюсь, что это поможет другим.
источник
Если вы работаете с представлением спецификации, вы можете заглушить
current_user
. Это эффективно отменяетcurrent_user
помощник, вызываемый из вашего представления, с тем, что возвращается. Вот как с rspec-3.2.3:источник
Похоже, в исходный код внесены некоторые изменения. ApplicationController указывает, что
authenticate_user!
перед любым запросом должен быть запущен фильтр. Эта ветка дает некоторую справочную информацию о проблемах с ней:http://groups.google.com/group/plataformatec-devise/browse_thread/thread/f7260ebe2d9f7316?fwc=1
По сути,
authenticate_user!
функция является частью Rails 3 (с использованием новойdevise
функции, о которой я мало что знаю). Если приложение не может найти модель пользователя (либо из-за проблем с пространством имен, либо по какой-либо другой причине), метод завершится ошибкой. Приложение "enki", с которым вы связались, теперь является приложением Rails 3. Он может испытывать некоторые боли роста по мере преобразования.источник
Ruby говорит вам, что этот метод
#authenticate
еще не определенnil
. Вы можете легко это сделать:И ошибка исчезнет.
источник