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

ここで、空の nick_name フィールドで送信ボタンをクリックすると、ポップアップのようなアラートが表示されます。これは通常のブラウザ アラートとは異なり、HTML5 の機能だと思います。Please fill out this field空のフィールドの下にポップアップとしてこのメ​​ッセージが表示されます。JavaScript を無効にしましたが、同じメッセージが表示されます。これは私の nick_name 入力フィールドです:

<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

3

required="required"実際には、次のコード例でhtml 属性を見つけることでテストできます。

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