2012-09-20 22 views
16

Soy nuevo en RSpec y Capybara y estoy tratando de probar si la página tiene un tiempo en ello. 12:00 o 14:24 o 08:12 son buenos ejemplos de lo que estoy tratando de probar.Prueba de capibara si la página tiene una expresión regular

estoy usando la siguiente expresión regular:

/^\d{2}:\d{2}/ 

No estoy seguro de cómo "la frase que" en capibara para poner a prueba si la página contiene esta expresión regular.

Respuesta

24

yo supongo que algo así como

page.text.should match(/^\d{2}:\d{2}/) 

o, con la nueva sintaxis RSpec

expect(page.text).to match(/^\d{2}:\d{2}/) 

o se puede probar no toda la página, pero algún elemento, por ejemplo,

find("span.time").text.should match(/^\d{2}:\d{2}/) 
+0

¡Gracias! Will page.text quedará obsoleto? –

+1

No creo, al menos no en el futuro cercano. Parece que mucha gente lo usa y considera que se lee bien. Para obtener más detalles, consulte [esta publicación del blog] (http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax) – khustochka

+0

Tenga en cuenta que al recuperar el contenido y luego utilizar los que no son de Capybara en el resultado rompe la funcionalidad de Capybara de esperar a que ocurra una coincidencia. Con esta solución, es probable que recuperes el texto antes de que se haya realizado el trabajo para colocar allí el texto que estás buscando. Iría tan lejos como para decir que este es un antipatrón de Capibara. –

11

No sé si esto es nuevo comportamiento, pero sólo puede utilizar has_content?:

page.has_content?(/do not have permission/i)

En rspec, eso sería algo como esto:

expect(page).to have_content(/do not have permission/i)

Lo encontré en el online documentation for capybara, pero está por debajo de has_text? desde has_content? es solo un alias.

+0

Desafortunadamente, Capybara no es compatible con las búsquedas que no distinguen entre mayúsculas y minúsculas según la [documentación de DSL] (https://github.com/jnicklas/capybara#the-dsl) –

+1

Esto es para la búsqueda de xpath, no para los emparejadores. 'have_content' se define por' has_content', un alias para 'has_text', que se basa en' assert_text', que toma una expresión regular. El motor de expresiones regulares de Ruby determina cómo una expresión regular coincide con algo, no con el DSL de capibara. https://github.com/jnicklas/capybara/blob/1a9417061c08194d9c4332cbbac186798cd5978a/lib/capybara/node/matchers.rb#L435 – Nerdmaster

Cuestiones relacionadas