#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.
Другие комментарии к вашему тесту
- Вы никогда не должны использовать общие сопоставители RSpec (эквалайзер и т. Д.) С информацией, связанной с капибарой
- Вы не должны устанавливать глобальные настройки Капибары (default_max_wait_time) в своем тесте. Вместо этого установите параметры для каждой команды для максимального времени ожидания или используйте
using_wait_time
, если это необходимо, для нескольких команд. - Нет смысла проверять содержимое, которое вы затем пытаетесь щелкнуть, так как 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