h1. Testing
h2. Testing con cucumber+capybara
Actualmente usamos para correr test una serie de gemas que están incluidas en :
Los tests se corren con
h3. Etiquetado de tests
con @wip (work in progress) podemos etiquetar ciertos tests que queremos correr con
ignorando el resto de tests. Así es más rápido el testing durante el desarrollo de estos.Con
ejecutamos todos los tests menos los etiquetados con @wip.Con @selenium etiquetamos tests que queremos correr con selenium.
h3. Desarrollo de tests
Para desarrollar test, se comienza editando un fichero
Un ejemplo de test sería:
Escenario: Sumar dos números
Dado que he introducido 1 en la calculadora
Y que he introducido 2 en la calculadora
Cuando oprimo el igual
Entonces el resultado debe ser 3 en la pantalla
Una vez escrito lo que esperamos que suceda, corremos
(o simplemente "cucumber") y como salida, nos va a mostrar el código:Dado /^que he introducido (\d+) en la calculadora$/ do |arg1|
pending # express the regexp above with the code you wish you had
end
Cuando /^oprimo el igual$/ do
pending # express the regexp above with the code you wish you had
end
Entonces /^el resultado debe ser (\d+) en la pantalla$/ do |arg1|
pending # express the regexp above with the code you wish you had
end
Esto es lo que tenemos que programar en
Digamos que son como expresiones regulares que indica los pasos que debe hacer cada feature. Por ejemplo, este paso pulsa en la sección:
h3. Organización del código de tests
Por defecto se cargan todos los pasos de
es decir, no es necesario incluir unos ficheros de pasos en otros.Se pueden anidar steps de esta forma:
Cuando /^pulso en la sección (.*)$/ do |seccion|
click_link seccion
end
(...)
Cuando /^me autentico y voy a la sección (.*) y controlador (.*)$/ do |seccion,controlador|
Cuando "entro como usuario admin/admin"
Cuando "pulso en la sección #{seccion}"
Cuando "pulso en el controlador #{controlador}"
end
Atención a las comillas de los steps anidados.
h3. Más sintaxis
Equivalencias ingles-español en cucumber (que a veces se olvida):
cucumber --i18n es help
| feature | "Característica" |
| background | "Antecedentes" |
| scenario | "Escenario" |
| scenario_outline | "Esquema del escenario" |
| examples | "Ejemplos" |
| given | "* ", "Dado " |
| when | "* ", "Cuando " |
| then | "* ", "Entonces " |
| and | "* ", "Y " |
| but | "* ", "Pero " |
| given (code) | "Dado" |
| when (code) | "Cuando" |
| then (code) | "Entonces" |
| and (code) | "Y" |
| but (code) | "Pero" |
h3. Factories: cargar datos de forma fácil
Con cucumber_factory se puede cargar datos de forma sencilla (ver "Dados unos datos básicos" en features/gong_steps.rb)
h3. Resolución de problemas
Cositas que pasan...
h4. Selenium y chromium
Cuando se corren tests con selenium (es algo más pesado y lento así que se debería evitar en lo posible) hay que hacer un enlace del tipo
También se puede probar con firefox pero los tests son más lentos aún. Se recomienda crear un profile (-ProfileManager) que se llame "selenium" e instalar allí el webdriver, firebug y otras extensiones de interés.
h4. Capturas html cuando hay problemas
Se puede marcar un paso con
lo cual guarda el html de la página actual y permite editar. Esto facilita ver el código actual, los ids, etc, para ver que puede fallar. Los ficheros se encuentranTambién puedo usar "Entonces haz una captura" junto con @selenium para ver una captura real (es un pelín lento).
h4. Informes html
Se pueden tener unos lindos listados de esta forma:
h3. Links
- https://github.com/jnicklas/capybara
- https://github.com/smparkes/capybara-envjs
- http://github.com/aslakhellesoy/cucumber-rails
- https://github.com/makandra/cucumber_factory
- https://github.com/aslakhellesoy/cucumber/wiki/Cucumber-Backgrounder
- https://github.com/aslakhellesoy/cucumber/wiki/Autotest-Integration
- https://github.com/aslakhellesoy/cucumber/wiki/Feature-Introduction
- https://github.com/aslakhellesoy/cucumber/wiki/Step-Argument-Transforms
Modos para tu editor preferido:
Rdocs:
- http://www.rdoc.info/github/aslakhellesoy/cucumber/master/frames
- http://www.rdoc.info/github/jnicklas/capybara/master/frames
h2. Adevertencia para la instalación entorno (ubuntu 9.04)
Para que pueda funcionar capybara:
Y para que pueda funcionar la captura de pantallas: