使用Rspec和Capybara,我正在尝试测试表单的失败验证,其中未填写“必需”输入,因此失败。理解HTML5的新导航员提供内置验证,我也理解Capybara也在使用它。之前,我正在使用
page.should have_error
这对我不起作用。
现在有人知道如何测试吗?
非常感谢!
大卫
答案 0 :(得分:3)
HTML5客户端验证很难找到。我发现this帖子的答案很好。 代码是:
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
基本上它的工作方式是field元素有一个名为“validationMessage”的属性,过程是:
答案 1 :(得分:2)
我对RSpec不熟悉所以我不确定have_error
是什么。
你应该考虑一下你想要测试的内容。
您肯定不想测试每个浏览器特定的确切行为(显示什么消息以及如何显示)。
表示您要测试的内容,因为这不是浏览器所特有的,因此表单未提交。例如,对于root的基本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
您还应该考虑仅在您的html代码中测试required
的存在,因为浏览器应该按预期工作(仅测试您的代码,而不是其他代码)
答案 2 :(得分:0)
如果有错误消息,您可以使用
page.should have_content("error")
这取决于您如何处理错误,以及您是否使用javascript。
答案 3 :(得分:-2)
这是一篇旧帖子,但我会尽力回答
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:
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
希望我能帮助其他人遇到这个问题。