8

我正在为我的 todo list app 使用 devise 和 simple_form 。现在,我的 users/edit.html.erb 有以下代码

<%= content_for :title,'Edit profile' %>
<h2>Edit profile</h2>
<%= simple_form_for current_user, class: 'form-horizontal' do |f| %>
  <%= f.input :nick_name %>
  <%= f.submit 'Update profile' %>
<% end %>

我的 user.rb 看起来像这样:

class User < ActiveRecord::Base  
 devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
 attr_accessible :email,:nick_name, :password, :password_confirmation, :remember_me
 validates :nick_name, presence: true    # the other fields already validated by devise
 has_many :lists , dependent: :destroy
end

现在,当我单击带有空昵称字段的提交按钮时,我会收到一种弹出式警报。它不像普通的浏览器警报,我认为它是 HTML5 功能。我收到此消息Please fill out this field作为空字段下方的弹出窗口。我禁用了 javascript,但它仍然显示相同的消息。这是我的昵称输入字段:

<input class="string required" id="user_nick_name" name="user[nick_name]" required="required" size="50" type="text">

现在,当我在模型中删除 nick_name 的存在验证时,不会出现此弹出窗口。当验证行被注释掉时,

<input class="string optional" id="user_nick_name" name="user[nick_name]" size="50" type="text">

simple_form 是在做一些幕后魔术吗?

由于此弹出窗口没有显示任何 html 代码痕迹,如何在 capybara/rspec 中测试此验证?

4

2 回答 2

4

由于您正在使用该required="required"属性,因此这会触发 HTML5 验证。

要对此进行测试: message = find("#user_nick_name").native.attribute("validationMessage") expect(message).to eq "Please fill out this field"

于 2018-06-07T14:53:15.070 回答
3

实际上,您可以通过required="required"使用以下代码示例查找 html 属性来对其进行测试:

expect(page).to have_xpath("//input[@required='required']")
于 2013-06-29T21:14:25.990 回答