Включение Capybara::DSL приводит к сбою всех моих тестов с неправильным количеством аргументов.

Я все еще пытаюсь решить фундаментальную проблему, изложенную в этом вопросе: Rails Phantomjs, полтергейст и капибара плохо работают вместе

В основном все мои тесты работают нормально, но я не могу получить правильный рендеринг экрана с использованием PhantomJS/Poltergeist/Capybara из моих тестов rspec.

С помощью небольшого скрипта, предоставленного @theSociable.me (если я запущу этот тест ОДИН), я могу получить визуализацию одного из моих экранов через Poltergeist/Capbybara! Здорово!

Однако когда я добавляю строку include Capybara::DSL в свои тесты, ВСЕ они начинают давать сбой с этой ошибкой:

 Failure/Error: visit signin_path
     ActionView::Template::Error:
       wrong number of arguments (0 for 1)

который, если я буду следовать обратной трассе:

# ./app/models/user.rb:118:in `authenticate_with_salt'
# ./app/helpers/sessions_helper.rb:67:in `user_from_remember_token'
# ./app/helpers/sessions_helper.rb:25:in `current_user'
# ./app/helpers/sessions_helper.rb:31:in `signed_in?'
# ./app/views/layouts/_header.html.erb:9:in `_app_views_layouts__header_html_erb__1456931984656374710_70286761365040'
# ./app/views/layouts/application.html.erb:12:in `_app_views_layouts_application_html_erb___847298267570209394_70286745935080'
# ./spec/requests/parties_spec.rb:22:in `block (2 levels) in <top (required)>'

похоже, проблема с моей строкой visit signin_path

..Есть идеи, почему включение Capybara::DSL в мой проект внезапно вызывает все эти массовые сбои при аутентификации/входе?

Спасибо!


person Dave Collins    schedule 06.12.2012    source источник


Ответы (1)


Дэйв, мне нужно увидеть содержимое спецификации вашего запроса, но, скорее всего, вы используете Capybara 2.x, которая требует, чтобы спецификации интеграции были помещены внутри spec/features, а не spec/requests.

spec/requests теперь зарезервирован для тестирования API (прямые запросы GET, код состояния и утверждения перенаправления и т. д.), поэтому он не получает автоматически Capybara DSL, в то время как любая спецификация, размещенная внутри spec/features, делает это.

У нас была аналогичная проблема, когда мы пытались предоставить доступ к Capybara DSL для наших спецификаций запросов, потому что нам это было необходимо (хотя я пока не уверен, что это хорошая идея). Это решение, к которому я пришел, и оно сработало для нас.

Вместо того, чтобы включать Capybara DSL в глобальную область, вам нужно включить его в блок конфигурации RSpec, например:

# spec/spec_helper.rb
RSpec.configure do |config|
  config.include Capybara::DSL, type: :request
end

Часть type: :request гарантирует, что DSL включается только для тестов, которые соответствуют этому конкретному типу, исходя из структуры каталогов, которую я считаю. Похоже, это не мешало другим тестам (например, спецификациям функций), имеющим доступ к Capybara DSL.

Надеюсь, это решит вашу проблему.

person Olivier Lacan    schedule 28.03.2013