Testing¶
Testing con cucumber+capybara¶
Actualmente usamos para correr test una serie de gemas que están incluidas en :
config/environments/cucumber.rb
Los tests se corren con
rake cucumber
Etiquetado de tests¶
con @wip (work in progress) podemos etiquetar ciertos tests que queremos correr con
rake cucumber:wipignorando el resto de tests. Así es más rápido el testing durante el desarrollo de estos.
@wip @selenium Escenario: Borrar un usuario
Con
rake cucumber:okejecutamos todos los tests menos los etiquetados con @wip.
Con @selenium etiquetamos tests que queremos correr con selenium.
Desarrollo de tests¶
Para desarrollar test, se comienza editando un fichero
feature/controlador.feature
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
rake cucumber(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
features/step_definitions/controlador_steps.rb
Digamos que son como expresiones regulares que indica los pasos que debe hacer cada feature. Por ejemplo, este paso pulsa en la sección:
Cuando /^pulso en la sección (.*)$/ do |seccion| click_link seccion end
Organización del código de tests¶
features/*.features features/step_definitios/*rb
Por defecto se cargan todos los pasos de
features/*/*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.
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" |
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)
Resolución de problemas¶
Cositas que pasan...
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
ln -s /usr/bin/chromium-browser /usr/bin/google-chrome
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.
Capturas html cuando hay problemas¶
Se puede marcar un paso con
save_and_open_pagelo 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 encuentran
tmp/capybara/
También puedo usar "Entonces haz una captura" junto con @selenium para ver una captura real (es un pelín lento).
Informes html¶
Se pueden tener unos lindos listados de esta forma:
cucumber --format html --out report.html firefox report.html
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
- http://www.rdoc.info/github/aslakhellesoy/cucumber/master/frames
- http://www.rdoc.info/github/jnicklas/capybara/master/frames
Adevertencia para la instalación entorno (ubuntu 9.04)¶
Para que pueda funcionar capybara:
sudo apt-get install libxslt-dev libxml2-dev
Y para que pueda funcionar la captura de pantallas:
sudo apt-get install scrot