Capybara + Webkit: Как проверить клиентские проверки - «обязательные» элементы ввода? - PullRequest
5 голосов
/ 24 мая 2011

Используя Rspec и Capybara, я пытаюсь проверить неудачную проверку формы, где «обязательный» ввод не заполняется, поэтому происходит сбой.Новые навигаторы, понимающие HTML5, предоставляют встроенные проверки, и я понимаю, что Capybara также использует это.Раньше я использовал

page.should have_error

, который больше не работает для меня.

Кто-то знает, как это проверить сейчас?

Большое спасибо!

David

Ответы [ 4 ]

3 голосов
/ 11 января 2018

Проверки на стороне клиента HTML5 найти сложно. Я нашел этот пост с отличным ответом. Код:

describe "when I leave required field empty" do
  it "I get an the correct html5 validation error" do
    #Leave the field empty
    click_on "Save" # or whichever button triggers the submit

    message = page.find("#field_id_attr").native.attribute("validationMessage")
    expect(message).to eq "Please fill out this field."
  end
end

По сути, он работает так, что элемент поля имеет атрибут «validationMessage», а процесс выглядит так:

  1. Нажмите «Отправить» - появится сообщение об ошибке
  2. Получить ссылку на собственный (html) атрибут (в отличие от атрибута объекта страницы Capybara), называемый «validationMessage». Это даст вам значение или само сообщение.
  3. Утверждение, что значение соответствует ожидаемому.
2 голосов
/ 27 июля 2013

Я не знаком с RSpec, поэтому я не уверен, что означает have_error.

Тебе стоит подумать, что именно ты хочешь проверить.

Вы, конечно, не хотите проверять точное поведение (какое сообщение и как отображается), поскольку оно специфично для каждого браузера. То, что вы хотите проверить, потому что это не относится к браузеру, так это то, что форма не отправлена.

Например, для базовой html-формы в корневом каталоге с обязательным переключателем «Мое значение».

# Check form can not be submitted without the radio button
visit '/'
click_button 'Submit'
assert_equal '/', current_path

# Check form can be submitted with the radio button
visit '/'
choose 'My value'
click_button 'Submit'
assert_equal '/next', current_path

Вам также следует рассмотреть возможность проверки только наличия required в вашем HTML-коде, поскольку предполагается, что браузер работает должным образом (тестируйте только ваш код, а не код другого)

0 голосов
/ 20 февраля 2016

Это старый пост, однако я постараюсь ответить на него

have_error - это метод, предоставляемый webkit, например, для проверки. если запросы ajax или javascript в целом работают нормально

Я использую, чтобы проверить мои проверки в моих моделях:

describe 'validations' do
   it { is_expected.to validate_presence_of :competitor_name }
   it { is_expected.to validate_presence_of :chassi }
   it { is_expected.to validate_presence_of :auction }
   it { is_expected.to validate_presence_of :car_template_id }
end  

или как

expect(FactoryGirl.create(:customer)).to be_valid

чтобы проверить действительность моей фабрики.

Если вам нужно проверить свои уведомления, указав неверные данные, вы можете проверить html своего уведомления с помощью capybara с помощью следующего:

  it 'searches for specific order_car by chassi and model' do   
     visit order_cars_search_detailed_path
     fill_in 'order_car_chassi', with: '123456'
     select 'Octavia', from: 'order_car_car_template_car_template_id'
     click_button 'Search Order'

     expect(page).to have_content('THIS IS MY NOTICE')
     expect(page).to have_content('123456')
  end  

Надеюсь, я смогу помочь некоторым другим разобраться с этим вопросом.

0 голосов
/ 12 августа 2011

Если есть сообщение об ошибке, вы можете что-то вроде

page.should have_content("error")

Это зависит от того, как вы обрабатываете ошибки, и используете ли вы JavaScript или нет.

...