#ruby-on-rails #capybara #minitest
Вопрос:
В тесте интеграции (без поддержки капибары) ЭТО утверждение работает:
assert_select "button", "Update"
для страницы, содержащей:
... <button name="button" type="submit" class="btn btn-primary">Update Account</button> ...
Мне нужна капибара для некоторых тестов на интеграцию.
Как выполнить то же утверждение (например, просто утверждать, что есть кнопка с обновлением текста), когда включены утверждения Capybara::Minitest::?
Я добавил Капибару в test_helper.rb, как показано ниже; теперь то же самое утверждение теперь выдает эту ошибку:
TypeError: no implicit conversion of String into Hash
Если я изменю формат утверждения на:
assert_select "button", text: "Update Account"
теперь это бросает эту неудачу:
expected to find select box "button" that is not disabled but there were no matches
Если я изменю формат утверждения на:
assert_selector "button", text: "Update Account"
теперь это бросает эту неудачу:
expected to find css "button" but there were no matches
# test_helper.rb
require 'capybara/rails'
require 'capybara/minitest'
class ActionDispatch::IntegrationTest
include Devise::Test::IntegrationHelpers
include FactoryBot::Syntax::Methods
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
include Capybara::Minitest::Assertions #### THIS LINE changes minitest assert_select #####
# Reset sessions and driver between tests
teardown do
Capybara.reset_sessions!
Capybara.use_default_driver
end
end
Комментарии:
1. Не смешивайте капибару с
ActionDispatch::IntegrationTest
. Вы хотите иметь быстрый и легкий тестовый класс для «чистых» интеграционных тестов и отдельный класс для тестирования взаимодействия с пользователем. Если вы используете Rails 5.17 , у вас есть ActionDispatch::SystemTestCase, который делает именно это. Вы даже можете создавать системные тесты . Если вы застряли на более старой версии, создайте подклассActionDispatch::IntegrationTest
, на котором вы основываете свои системные тесты.
Ответ №1:
Ты хочешь
assert_selector :button, "Update Account"
НО вам также нужно использовать методы Капибары для управления сеансами и visit
т. Д.-Капибара не использует ответы get
и post
т. Д. из интеграционных тестов.