Почему тест рельсов возвращается к исходному пути после нажатия на кнопку? - PullRequest
0 голосов
/ 25 мая 2018

У меня есть следующий системный тест (бэкэнд Rails, одностраничное приложение React / Redux):

test "can sign up user properly" do
    visit '/'
    within ('.signup-form-box') do
       fill_in 'Username', with:'userp'
       fill_in "Email Address", with: "t!"
       fill_in "Password", with: "12345679"
       click_on "Sign Up"
    end
    assert page.current_path ==  '/books'
end

Предполагается, что после успешной регистрации пользователь должен перейти на страницу '/ books'.Однако этот тест не проходит.Когда я изменяю утверждение на:

 assert page.current_path ==  '/'

, оно проходит.Как правильно проверить подобные вещи?

1 Ответ

0 голосов
/ 25 мая 2018

click_on не гарантируется ожидание каких-либо действий, вызванных им, потому что у Капибары нет возможности узнать, какие действия, если таковые будут, будут выполнены.Именно по этой причине Capybara имеет встроенное поведение ожидания в средствах поиска, сопоставлениях и утверждениях, позволяющие страницам догонять тест.В этом случае вы используете универсальное утверждение против возвращенной вещи Капибары, а не сопоставителя, предоставленного Капибарой.Вместо assert page.current_path == '/books' вы должны использовать

assert_current_path '/books'

, который будет некоторое время проверять путь, чтобы увидеть, если / когда он изменится.Если это не решит вашу проблему, это будет означать, что ваш логин / регистрация не удалась, что должно быть очевидно для подтверждения, посмотрев на страницу (html или скриншот).

Примечание: я бы предположил, что ваш тест долженОшибка, так как ввод t! в качестве адреса электронной почты должен провалиться.

...