Capybara

#ruby-on-rails #ruby #rspec #capybara #capybara-webkit

Вопрос:

Это ошибка, когда я запускаю тест на капибару:

  Failure/Error:
       respond_to do |format|
         #format.html
         format.js
       end

     ActionController::UnknownFormat:
       ActionController::UnknownFormat
 

Это из файла контроллера: (раскомментировано format.html не сработало)

   def new
    @location = @provider.locations.new
    @address = @location.build_address
    @addresses = []
    respond_to do |format|
      #format.html
      format.js
    end
 

Это код капибары

 describe "this tab" do
    it "shows data" do 
      visit locations_profile_path(@provider)
      expect(current_path).to eq("/profile/#{@provider.id}/locations")
      expect(page).to have_content("All Practice Locations")
      expect(page).to have_content('Add New Location')
      Capybara.default_max_wait_time = 20
      click_on 'Add New Location'
end
end
 

Ответ №1:

Вы утверждаете, что раскомментирование format.html не сработало, но я готов поспорить, что это не удалось с другим сообщением об ошибке, потому что у вас нет представления html. Я также предполагаю, что сообщение об ошибке, которое вы видите, исходит из click_on 'Add New Location' строки, которая отображается в единственной части вашего теста, которая вызывает new действие. Не видя кода на вашей странице, вызванного нажатием кнопки «Добавить новое местоположение», я не могу быть на 100% уверен, в чем проблема, но, основываясь на ошибке, я предполагаю, что вы на самом деле не используете драйвер capybara-webkit (хотя вопрос помечен этим). На самом деле вам все равно не следует использовать драйвер capybara-webkit в настоящее время, так как он устарел много лет назад. Скорее вам следует обратить внимание на один из современных поддерживаемых драйверов, таких как Selenium и т. Д. В зависимости от того, какую версию Rails вы используете и какой тип тестов вы пишете, вам нужно будет либо просмотреть Rails/RSpec driven_by (для Rails 6 и системных спецификаций), либо капибары default_driver и javascript_driver настройки, если вы пишете спецификации функций — нажмите «Добавить новое местоположение». Если вы неправильно выбираете используемый драйвер, то по умолчанию будет использоваться драйвер для тестирования в стойке, который не поддерживает JS и, следовательно, никогда не будет запрашивать ответ в формате JS.

Другие комментарии к вашему тесту

  1. Вы никогда не должны использовать общие сопоставители RSpec (эквалайзер и т. Д.) С информацией, связанной с капибарой
  2. Вы не должны устанавливать глобальные настройки Капибары (default_max_wait_time) в своем тесте. Вместо этого установите параметры для каждой команды для максимального времени ожидания или используйте using_wait_time , если это необходимо, для нескольких команд.
  3. Нет смысла проверять содержимое, которое вы затем пытаетесь щелкнуть, так как click_on также проверяет его существование

принимая это во внимание, ваш тест должен быть написан более похоже

 visit locations_profile_path(@provider)
expect(page).to have_current_path("/profile/#{@provider.id}/locations")
expect(page).to have_content("All Practice Locations")
click_on 'Add New Location', wait: 20