2013-06-29 6 views
6

Uso la devise e la simple_form per la mia app per la lista di cose da fare. Ora, ho il seguente codice per i miei utenti/edit.html.erbTest di convalida di form HTML 5 quando si utilizza Rails simple_form

<%= 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 %> 

mio user.rb si presenta così:

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 

Ora, quando clicco su pulsante di invio con una NICK_NAME vuoto campo, ricevo un tipo di avviso popup. Non è come un normale avviso del browser, penso che sia una funzionalità HTML5. Ottengo questo messaggio Please fill out this field come un popup sotto il campo vuoto. Ho disabilitato javascript, ma mostra ancora lo stesso messaggio. Questo è il mio NICK_NAME campo di input:

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

Ora, quando rimuovo la convalida presenza per NICK_NAME nel mio modello, questo popup non appare la linea di convalida .Quando è commentata,

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

È semplice fare qualcosa di magico dietro le quinte?

Poiché questo popup non mostra alcuna traccia di codice html, come verificare questa convalida in capybara/rspec?

+0

Quella è una caratteristica HTML5, è necessario solo l'attributo e di sostegno naturalmente del browser. – Musa

+0

Ok, come faccio a testarlo usando capybara? – lnreddy

risposta

3

In realtà è possibile verificare che trovando attributo HTML required="required" con il seguente esempio di codice:

expect(page).to have_xpath("//input[@required='required']") 
+8

Grazie mille .. Ma c'è un modo per testare il messaggio che appare? O almeno per verificare che il modulo non presenti? – lnreddy

+1

Ciò non verificherà che il modulo sia in realtà in fase di validazione. – steel