2009-05-28 15 views
7

Estoy tratando de probar para ver si un campo de entrada coincide con una de mis fábricas donde el campo está vacío.¿Cómo se prueba para un campo de entrada vacío?

address => {:first_name => '', :last_name => ''} 

Cuando la comprobación de lo que está en el campo de entrada He estado usando esto:

assert_select '#first_name[value=?]', address.first_name 

Excepto esto no funciona si el nombre está en blanco. Obtendré este error y la prueba falla.

Expected at least 1 element matching "#first_name[value='']", found 0. 
<false> is not true. 

Esto tiene sentido porque el código generado no tendrá el atributo de valor. ¿Hay una mejor manera de verificar el valor de un campo de entrada?

A partir de ahora para probar esto puedo verificar si el campo de dirección está en blanco y luego verificar si hay un campo de entrada sin un atributo de valor. Pero esto es desordenado y detallado.

Ejemplo de un registro universal que funciona, pero es largo:

if address.first_name.blank? 
    assert_select '#first_name[value]', 0 
    assert_select '#first_name[type=text]', 1 
else 
    assert_select '#first_name[value=?]', address.first_name 
end 

Información relacionada estoy usando:
hpricot 0.8.1
Nokogiri 1.1.1
Rails 2.2.2
Thoughtbot -Shoulda 2.0.5
Webrat 0.4.1

+0

duplicado posible de [Cómo afirmar que un elemento de entrada está vacía en Ruby on Rails pruebas] (http: // stackoverflow.com/questions/6308158/how-to-assert-that-an-input-element-is-empty-in-ruby-on-rails-tests) – jasondoucette

Respuesta

1

Quizás se puede utilizar:

assert_select "#first_name" do 
    assert_select "[value=?]", address.first_name unless address.first_name.blank? 
end 

No creo que pueda hacerlo más corto. Si se trata de un patrón que se repite en el caso de test, se puede extraer a una afirmación de encargo:

def assert_has_value_unless_blank(selector, value) 
    assert_select selector do 
    assert_select "[value=?]", value unless value.blank? 
    end 
end 

assert_has_value_unless_blank "#first_name", address.first_name 
+4

Esto no parece probar que el elemento de entrada esté vacío, simplemente omite la prueba para el atributo de valor si el valor pasado es en blanco. – harald

Cuestiones relacionadas