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
В приведенном выше коде первый assert проходит, а второй терпит неудачу.Это должно случиться иначе.После выполнения click_link_or_button('Login') логины страницы предполагаются.Что я делаю не так?
click_link_or_button('Login')
Спасибо!
Для тех, кто ищет эту проблему в настоящее время - с Capybara 2.5 вы можете сделать
assert_current_path('/posts/index')
и он будет использовать поведение ожидания Capybara, чтобы проверить, изменяется ли путь на ожидаемый
Кажется, что переменная current_path еще не обновила свое новое значение пути.Так что нужно дождаться пути.Я сделал это двумя способами: исправил ошибку, препятствующую корректному current_path обновлению переменной , и rspec-wait gem .Итак, код ожидания следующий:
current_path
rspec-wait
wait_for{ page }.to have_current_path(posts_path)
Что вы на самом деле пытаетесь проверить? Текущий_путь не может быть одновременно "/ logins / new" и "/ posts / index".
Я бы сказал, перенести первое утверждение сразу после шага посещения. Тогда ваш тест будет иметь смысл. Если по-прежнему происходит сбой, действие по входу в систему не работает.