утверждение текущего пути

#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)