2012-08-16 17 views
15

Usando el Pepino y el Carpincho, ¿hay alguna manera de verificar que una cadena NO esté presente en una página?Pepino/Capibara: verifique que una página NO tenga contenido?

Por ejemplo, ¿cómo I escribir el opuesto de este paso:

Then /^I should see "(.*?)"$/ do |arg1| 
    page.should have_content(arg1) 
end 

Esto pasa si arg1 está presente.

¿Cómo puedo escribir un paso que falla si se encuentra arg1?

Respuesta

-3

Oh, espera, lo descubrí. Esto funciona:

Then /^I should see "(.*?)"$/ do |arg1| 
    page.has_content?(arg1) == false 
end 
+5

Su código no afirma el contenido. Supongo que si cambias falso por verdadero, tu prueba aún pasará. –

+0

Esto me había hecho tropezar varias veces. O bien usa 'assert page.has_content ...' o 'page.should have_content ...' No se pueden mezclar los dos estilos juntos. Buena llamada, @ PhilippeRathé. – Tass

8

También puede utilizar should_not si lo quieres leer un poco mejor:

Then /^I should not see "(.*?)"$/ do |arg1| 
    page.should_not have_content(arg1) 
end 

algo más de información: https://www.relishapp.com/rspec/rspec-expectations/docs

+0

Tenga en cuenta que esto solo funcionará correctamente para las pruebas de JavaScript si tiene Capybara :: RSpecMatchers incluidos para su especificación. Acabo de encontrarme con ese problema aquí: http://stackoverflow.com/a/15253235/125377 – Ari

+11

Use 'has_no_content?' En su lugar. Eso provocará la espera interna del carpincho. De lo contrario, fallará prematuramente si está esperando que el contenido desaparezca de la página. – keithepley

3

actualidad, se puede utilizar:

Then /^I not see "(.*?)"$/ do |arg1| 
    expect(page).to have_no_content(arg1) 
end 

Y si el contenido se encuentra en la página, la prueba es de color rojo

+0

Esta es la sintaxis correcta. Si está utilizando expect(), volvería a redactar su especificación eliminando "debería" de la descripción. ¡Más asertivo! :) – Rimian

+0

Gracias @Rimian. Lo arreglé! –

10

En Rspec 3.4 en la actualidad (2016) Esta es la forma recomendada de probar por no tener contenido:

expect(page).not_to have_content(arg1) 
+0

¿Dónde ves que esto se recomienda sobre 'expect (page) .to have_no_content (arg1)'? Parece que no hay forma de que no se sepa que no se debe esperar a que el contenido esté en la página, que es lo que 'have_content' haría, creo. – Ibrahim

+0

Las advertencias de desaprobación se muestran al usar'expect (página) .to have_no_content (arg1) ' –

+0

@RobHughes, las advertencias de depreciación de las que habla deben haberse eliminado en rspec 3.5.4/capybara 2.6.2. Según los documentos: https://github.com/teamcapybara/capybara#asynchronous-javascript-ajax-and-friends- 'Los correctores de RSpec de Capybara, sin embargo, son lo suficientemente inteligentes como para manejar cualquier formulario. Las dos afirmaciones siguientes son funcionalmente equivalentes: expect (page) .not_to have_xpath ('a'), expect (page) .to have_no_xpath ('a') ' – seanriordan08

Cuestiones relacionadas