2012-01-26 17 views
33

Estoy escribiendo una aplicación en la que es conveniente comprobar si una vista tiene no tiene alguna funcionalidad, en particular porque esa funcionalidad debe presentarse solo a los usuarios en cierto grupo de seguridad. Estoy buscando lo contrario de assert_selects para ver que un menú es no prestados.Lo contrario de assert_select?

Respuesta

41

Tome un vistazo a la documentación aquí:

http://apidock.com/rails/ActionController/Assertions/SelectorAssertions/assert_select

A partir de los documentos:

assert_select es un assertion that selects elements and makes one or more equality tests.

y de las pruebas de igualdad s reflexiones:

La prueba de la igualdad puede ser uno de los siguientes:

cierto - afirmación es cierta si al menos un elemento seleccionado.

falso - La aserción es verdadera si no se ha seleccionado ningún elemento.

Cadena/Regexp - La aserción es verdadera si el valor de texto de al menos un elemento coincide con la cadena o la expresión regular.

Entero - La aserción es verdadera si exactamente ese número de elementos es seleccionado.

Rango - La aserción es verdadera si el número de elementos seleccionados se ajusta al rango .

Si no se especifica ninguna prueba de igualdad, la afirmación es verdadera si se seleccionó al menos un elemento .

Y un ejemplo sencillo:

# Page contains no forms 
    assert_select "form", false, "This page must contain no forms" 
0

Se puede definir fácilmente su propio:

module ActionDispatch::Assertions::SelectorAssertions 
    def assert_no_select(*a,&b) # try to think of a better name! 
    begin 
     assert_select(*a,&b) 
    rescue AssertionFailedError 
     return 
    end 
    raise "fail" # there should be a better built-in alternative 
    end 
end 
+0

Esto no va a funcionar ya que'AssertionFailedError' se genera antes de evaluar la negación. – gertas

+0

¡Buen punto! Editado –

26

No olvide que puede pasar siempre en el recuento, y establece que a cero.

assert_select "a", {count: 0, text: "New"}, "This page must contain no anchors that say New" 
+0

Esto no funciona para mí: no se produce ninguna excepción incluso cuando se encuentra el elemento. –

+1

Actualización: Funciona bien para cualquier elemento que no sea 'cuerpo'. –

+0

¡Es bueno saberlo! Gracias @MatijsvanZuijlen – GantMan

2

Tuve este problema para asegurar que NO HABRÍA un botón 'Eliminar', de entre muchos botones. La respuesta aceptada no funcionaría en esta situación porque ya hay varios botones.

assert_select '.button' do |btn| 
    btn.each do |b| 
    assert_no_match 'Delete', b.to_s 
    end 
end 

Sin embargo, ¡me gusta mucho la respuesta de GantMan!

Cuestiones relacionadas