#ruby-on-rails #integration-testing #capybara
#ruby-on-rails #интеграция-тестирование #capybara
Вопрос:
require 'test_helper'
class MyTest < ActionController::IntegrationTest
test "view posts from login page" do
visit("/logins/new")
find_field('Username').set('abode')
find_field('Password').set('efghi')
click_link_or_button('Login')
#assert current_path == "/logins/new"
assert current_path == "/posts/index"
end
end
В приведенном выше коде первое утверждение выполняется, тогда как второе не выполняется. Это должно произойти иначе. После click_link_or_button('Login')
выполнения логинов страницы, которые я предполагаю. Что я делаю не так?
Спасибо!
Ответ №1:
Для тех, кто ищет эту проблему в настоящее время — с Capybara 2.5 вы можете сделать
assert_current_path('/posts/index')
и он будет использовать поведение ожидания Capybara, чтобы проверить, изменится ли путь на ожидаемый
Ответ №2:
Что вы на самом деле пытаетесь протестировать? Невозможно, чтобы current_path был одновременно «/ logins/new» и «/posts/index».
Я бы сказал, переместите первое утверждение сразу после шага посещения. Тогда ваш тест будет иметь смысл. Если он все еще терпит неудачу, то действие входа в систему не работает.
Комментарии:
1. О, нет, на самом деле я комментировал одно и запускал другое. Это в интеграционном тесте.
2. Я ввожу первое утверждение после посещения, оно проходит.
3. @Vinisa Весь тест проходит или только первое утверждение?
4.
assert current_path == "/logins/new"
работает, что означает, что он не входит в систему, аassert current_path == "/posts/index"
не то, что в идеале должно.
Ответ №3:
Похоже, что current_path
переменная еще не обновила свое новое значение пути. Итак, вам нужно дождаться пути. Я сделал это с двумя вещами: исправлена ошибка, указывающая на корректное current_path
обновление переменной, и rspec-wait
gem. Итак, код ожидания следующий:
wait_for{ page }.to have_current_path(posts_path)