Капибара / Rspe c - Есть ли способ проверить, было ли заполнено поле ввода, прежде чем нажать кнопку «Отправить»? - PullRequest
1 голос
/ 27 апреля 2020

Я изучаю RSpe c и Capybara и пытаюсь проверить, может ли пользователь перейти на страницу входа (на базе Devise) и успешно войти в систему. Тест не видит страницу, которая должна быть после успешного входа в систему. При использовании браузера, если ввод отсутствует, он возвращается на страницу входа. Я использую Rails 5.

login_spe c .rb

require 'spec_helper'
require 'rails_helper'
RSpec.feature "Logging in a User" do
    scenario "Logging in user shows special content" do
        visit "/"
        click_link "Sign In"    

        page.should have_content("Password")

        #fill in login information
        page.fill_in 'Email', with: 'admin@example.com'
        page.fill_in 'Password', with: 'some_password'
        click_on 'Log in'

        page.should have_no_content("Wait for the text which is available in the sign in page but not on next page")
        page.should have_content('User:')
        expect(page.current_path).to eq(root_path)
    end
end

Сообщение об ошибке Capybara:

  1) Logging in a User Logging in user shows special content
     Failure/Error: page.should have_content('User:')
       expected to find text "User:" in "Log in\nEmail\nPassword\nRemember me\nSign up Forgot your password?"
     # ./spec/features/login_spec.rb:17:in `block (2 levels) in <top (required)>'

1 Ответ

1 голос
/ 27 апреля 2020

Да, вы можете проверить, заполнено ли поле с помощью have_field matcher

expect(page).to have_field('Email', with: 'admin@example.com')

, чтобы убедиться, что на странице есть поле с меткой 'Email' и заполненным значением ' admin@example.com '.

Это не является причиной вашей текущей проблемы, но есть ли причина, по которой вы смешиваете синтаксисы RSpecs should и expect? Вы действительно должны придерживаться одного, предпочтительно `ожидать нового кода - поэтому

expect(page).to have_content("Password")
expect(page).not_to have_content("Wait for the text which is ...

вместо

page.should have_content("Password")
page.should have_no_content("Wait for the text which is ...

Кроме того - вы почти никогда не должны использовать простые соответствия RSpe c (eq, et c) со всем, что связано с Капибарой, вместо этого вам следует использовать предоставленные Капибарой сопоставители

expect(page).to have_current_path(root_path)

вместо expect(current_path)...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...