Огурец не использует маршрут в тестовом режиме, который я могу использовать в режиме разработки

В режиме разработки я могу указать браузеру http://arewesmallyet.dev/data и увидеть дамп json всех моих очищенных данных, что указывает на то, что сопоставление маршрутов и действие с данными в приложении выполняют свою работу.

В /features/step_definitions/landing_steps.rb у меня есть:

When /^I visit the (.*) page$/ do |webpage|
  visit path_to(webpage)
end

В /features/support/url.rb у меня есть:

def path_to(webpage)
  case webpage
    when 'home'
      '/'
    when 'data'
      '/data'
  end
end

и rake routes дает:

Application: Arewesmallyet
    URL         REQUEST  PATH
    (:index)      GET    /
    (:data)       GET    /data(.:format)

Но когда я запускаю огурец, я получаю:

Scenario: data page                     # features/landing.feature:10
  Given records exist in the database   # features/step_definitions/landing_steps.rb:9
  When I visit the data page            # features/step_definitions/landing_steps.rb:1
File saved to ~/Developer/Ruby/arewesmallyet/capybara-timestamp.html.
Please install the launchy gem to open the file automatically.
  Then I should be served the json data # features/step_definitions/landing_steps.rb:15
    proper content missing (Minitest::Assertion)
    features/landing.feature:13:in `Then I should be served the json data'

а capybara-timestamp.html имеет содержимое из '/'. Когда я добавляю puts path_to(webpage) к шагу, я получаю правильные пути. Но current_url дает '/'.

На самом деле, если я изменю шаг на:

When /^I visit the (.*) page$/ do |webpage|
  puts path_to(webpage)
  visit path_to(webpage)
  puts 'first:'+current_path
end

(усеченный) вывод:

 When I visit the data page  # features/step_definitions/landing_steps.rb:1
  /data
  first:/

Как мне найти причину этой проблемы?

Что-то интересное я нашел во время отладки с byebug:

Capybara пытается посетить http://www.example.com, когда я говорю ему посетить '/data', '/data.json', '/data.js', '/' или любой другой путь. Поскольку все пути превращаются в http://www.example.com, компонент пути к URL-адресу отсутствует, поэтому мой приложение, очевидно, служит '/'. Я НЕ хочу получать доступ к удаленному URL-адресу, поэтому я использую пути '/' и '/data', а также драйвер :rack_test; но на основе обсуждения на https://groups.google.com/forum/#!topic/ruby-capybara/HMKCIDJAA6w capybara просто полностью не работает?

Есть ли обходной путь или этот драгоценный камень просто бесполезен?

Я сообщил о проблеме на странице https://groups.google.com/forum/#!topic/ruby-capybara/SaB81spfil8, посмотрим, потрудятся ли они это исправить.


person Camden Narzt    schedule 25.12.2014    source источник


Ответы (2)


Вы можете использовать byebug для отладки этого и шагнуть в код, чтобы увидеть, что происходит. Добавьте byebug в группу разработки, тестирования в вашем Gemfile и выполните пакетную установку. Затем поместите оператор byebug в определение шага перед посещением.

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

Сказав это, я подозреваю, что проблема в вашем маршруте. Я предполагаю, что браузер гораздо более либерален в отношении того, как он интерпретирует маршруты, по сравнению с драйвером, который вы используете при тестировании. Поэтому я бы попробовал изменить маршрут данных на «data.json» или data.html и посмотреть, что произойдет. Если это не сработает, добавьте к своему вопросу содержимое route.rb.

person diabolist    schedule 26.12.2014

Capybara преднамеренно использует example.com, если вы не установили app_host, и, поскольку я перенаправляю, если домен неверен, это неприемлемо, поэтому я должен установить хост приложения в моем файле features/support/env.rb следующим образом:

Capybara.app_host = 'http://arewesmallyet.dev'

person Camden Narzt    schedule 24.06.2015