Подтвердить что ты не робот

Выполнение функциональных тестов в Rails с помощью Devise

После 3 лет просрочки сегодня - это день, когда я начинаю тестировать свои приложения Rails. Мой первый шаг - исправить неудачные тесты в моем приложении Rails 3 beta4.

Мои последние 3 неудачных теста связаны с драгоценным камнем разработки и его authenticate_user! метод в файле before_filter в верхней части моего контроллера.

Ты получишь отличную карму, помогая мне в этом, так как теперь я смогу использовать методологию TDD.

Вот ошибка, которая меня беспокоит:

1) Error:
test_should_get_accepted(ModerationControllerTest):
NoMethodError: undefined method `authenticate!' for nil:NilClass
    /test/functional/moderation_controller_test.rb:10:in `test_should_get_accepted'

Devise просто дает указатели на функциональные тесты и помощники на этой странице: http://github.com/plataformatec/devise, но я просто не знаю, как применить это в приложении.

Можете ли вы дать этому тесту noob некоторые подробные инструкции о том, как использовать эти помощники?

4b9b3361

Ответ 1

Мне потребовалось некоторое время, но я нашел путь. Здесь это для тех, кто застрял в одной точке:

В верхней части moderation_controller_test.rb, ниже объявления класса, добавьте следующую строку:

include Devise::TestHelpers

У меня есть 2 записи в моем пользовательском приборе, и я добавил эту строку в каждом тесте, где пользователю разрешено выполнять действие.

sign_in User.first

Конечно, он мертв просто, как только вы знаете, как это сделать.

Ответ 2

Если вы хотите, чтобы помощники теста Devise были доступны для всех ваших тестов, вы должны включить include, упомянутый allesklar в нижней части test_helper.rb в объявлении класса, например:

class ActionController::TestCase
  include Devise::TestHelpers
end

Обновление: 01.25.2017

... rails 5 posts a DEPRECATION WARNING и просит вас использовать...

Devise::Test::ControllerHelpers

Ответ 3

Я относительно новичок в Rails, поэтому я хотел бы добавить пару вещей, которые могут быть неочевидны для других новых людей.

Что касается пользовательского устройства, я должен был определить его, но оставить его пустым, чтобы это работало:

# in users.yml    
joe: {}

При использовании помощника sign_in вы можете получить доступ к хэш-объекту непосредственно в своем тесте:

# a test method in some_controller_test.rb
sign_in users(:joe)

Подробнее о Rails-устройствах см. http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures.

Ответ 4

Цитата из https://github.com/plataformatec/devise:

Если вы используете RSpec, вы можете поместить следующее внутри файла с именем spec/support/devise.rb:

RSpec.configure do |config|

     

config.include Devise::TestHelpers, :type => :controller

     

end

Теперь вы можете использовать sign_in и sign_out в тестах RSpec.

Ответ 5

В дополнение к коду в test_helpers.rb, я добавил это вверху контроллера_test, и это сработало для меня:

require 'test_helper'