RSpec es una herramienta de prueba de lenguaje específico de dominio (DSL) (dominio de aplicación particular) escrita en el lenguaje de programación Ruby para probar código Ruby. [ 4 ] Es un marco de desarrollo dirigido por el comportamiento (BDD) que se utiliza ampliamente en aplicaciones de producción. La idea básica detrás de este concepto es la del desarrollo dirigido por pruebas (TDD), donde las pruebas se escriben primero y el desarrollo se basa en escribir solo el código suficiente para cumplir con esas pruebas, seguido de la refactorización . Contiene su propio marco de simulación que está completamente integrado en el marco basado en JMock . [ 5 ] La simplicidad en la sintaxis de RSpec lo convierte en una de las herramientas de prueba más populares para aplicaciones Ruby. La herramienta RSpec se puede usar instalando la gema que consta de otras tres gemas, a saber , y [ 4 ]rspecrspec-corerspec-expectationrspec-mock.
Historia
RSpec fue creado como un experimento por Steven Baker en 2005 junto con los miembros de su equipo Dave Astels, Aslak Hellesøy y David Chelimsky. Chelimsky fue responsable del desarrollo de RSpec-Rails, que facilitó la integración con Ruby on Rails. La versión inicial, RSpec 1.0, se lanzó en mayo de 2007 e incluía muchas de las características principales de RSpec, las cuales también se han incorporado en las versiones más recientes. Sin embargo, debido a algunos problemas técnicos, como la velocidad de las pruebas, posteriormente se descontinuó. La tercera versión de RSpec, RSpec 3, se lanzó en julio de 2014 e incluyó muchas características nuevas, como la verificación de dobles, comparadores componibles y muchas más.
Uso
Describir el comportamiento de los objetos
Como se mencionó anteriormente, RSpec proporciona un lenguaje específico de dominio para describir el comportamiento de los objetos . Las palabras clave utilizadas en RSpec son similares a las utilizadas en otros lenguajes y/o marcos de trabajo TDD. [ 6 ] Por ejemplo, si se consideran las palabras clave utilizadas en Test::Unit, se pueden asignar a las palabras clave de RSpec de la siguiente manera:
- La afirmación se convierte en expectativa.
- El método de prueba se convierte en código de ejemplo.
- El caso de prueba se convierte en un grupo de ejemplos.
Existen muchas palabras clave similares que se utilizan en el mismo contexto, pero con nombres parecidos. La sintaxis de RSpec facilita la lectura y describe el comportamiento del código, lo que brinda libertad al programador. Todo framework de pruebas funciona de la siguiente manera: dado un contexto, cuando ocurre un evento, se espera un resultado. Los métodos como `describe()` , `context()` e `it()` constituyen, respectivamente, la analogía y el esqueleto del código de prueba.
describir()
El método describe() se utiliza para describir una clase, un método o un grupo de ejemplos. Este es el bloque externo que contiene el código de prueba y describe las características del código que contiene. Este método acepta varios argumentos y un bloque opcional. [ 6 ] Sin embargo, normalmente se utilizan uno o dos argumentos para describir el comportamiento del grupo de ejemplos. El primer argumento representa la referencia a la clase o módulo, mientras que el segundo es opcional y su tipo de dato es String . [ 6 ] Los grupos de ejemplos también pueden estar anidados. Un ejemplo del uso del método describe es el siguiente: [ 6 ]
describe Usuario , "sin saldo en la cuenta" { .... } => Usuario sin saldo en la cuenta[ 6 ]
contexto()
El bloque context() se utiliza para describir el contexto en el que se utiliza la clase o el método mencionado en el bloque describe. En este caso, puede considerarse un alias de la palabra describe() y ambos se pueden usar indistintamente. Generalmente, describe() se usa para cosas y context() para contextos. Esto ayuda a explorar diferentes resultados en diferentes escenarios. El ejemplo mencionado anteriormente se puede describir usando el método context() de la siguiente manera: [ 6 ]
describe Usuario hacer contexto "no tiene saldo en su cuenta" hacer .... fin fin[ 6 ] El uso decontext()facilita el escaneo de un archivo de especificaciones y deja claro a qué se refiere.
él()
Es un método de RSpec que describe las especificaciones de la muestra en el contexto. El bloque `it()` toma una cadena como argumento, y la cadena que sigue a la palabra clave `it` puede considerarse como la función que se espera que realice el bloque o, dicho de otro modo, puede considerarse como un caso de prueba. Considere el siguiente ejemplo: [ 6 ]
describe User do context "no tiene saldo en su cuenta" do it "no se le permite aprobar un préstamo hipotecario" do puts "El préstamo no se puede aprobar debido a que no hay saldo en la cuenta." end end end[ 6 ]
RSpec::Expectativas
En RSpec, una expectativa es una declaración que expresa el estado en el que se espera que algo esté en un punto particular de la ejecución de un ejemplo de código. RSpec utiliza un marco simple y palabras clave como should() y should_not() para expresar expectativas. Admite comparadores, es decir, objetos que intentan coincidir con un resultado esperado, tanto para operaciones comunes como para expresiones poco comunes. Por ejemplo, si el resultado esperado es el valor numérico 5, una expectativa de RSpec que utiliza el comparador equal para el mismo se escribiría de la siguiente manera: [ 6 ]
result.should equal(5)
RSpec::Mocks
RSpec proporciona una biblioteca llamada RSpec::Mocks para crear objetos de prueba que facilitan el enfoque en roles, el descubrimiento de interfaces , pero sobre todo el progreso sin dependencias implementadas , lo que proporciona aislamiento del acoplamiento y el no determinismo . [ 6 ]
Herramientas e integración
RSpec es compatible con numerosos editores de texto y conjuntos de herramientas de cobertura. Además, proporciona diversas utilidades y puntos de extensión para adaptarlo a necesidades específicas de cada dominio. Por ejemplo, permite usar metadatos asociados a grupos y ejemplos para generar informes, asignar bloques "antes" y "después" a cada grupo de ejemplos mediante configuración global , usar macros , etc.
Otras herramientas de prueba de Ruby
Referencias
- ↑ Equipo principal de RSpec . Consultado el 8 de abril de 2013.
- ↑ "todas las versiones de rspec" . rubygems.org . Consultado el 11 de febrero de 2014 .
- ↑ "Versión 3.13.0" . 4 de febrero de 2024. Consultado el 20 de febrero de 2024 .
- 1 2 "Introducción a RSpec | The Odin Project" . www.theodinproject.com . Consultado el 18 de febrero de 2017 .
- ↑ "jMock - Una biblioteca de objetos simulados expresiva para Java" . www.jmock.org . Consultado el 18 de febrero de 2017 .
- 1 2 3 4 5 6 7 8 9 10 11 "El libro de RSpec: Desarrollo impulsado por el comportamiento con RSpec, Cucumber y amigos por David Chelimsky, Dave Astels, Zach Dennis, Aslak Hellesøy, Bryan Helmkamp, Dan North | The Pragmatic Bookshelf" . pragprog.com . Consultado el 11 de febrero de 2017 .
Lecturas adicionales
1. Primeros pasos con RSpec: (pasos de instalación) http://rspec.info/
2. Beck, K. (2014). Desarrollo guiado por pruebas mediante ejemplos . Boston: Addison-Wesley.
Enlaces externos
- Sitio web oficial
- RSpec-2 archivado el 22/07/2011 en Wayback Machine .
- Más allá del desarrollo guiado por pruebas: desarrollo guiado por comportamiento. Una charla técnica de Google a cargo de Dave Astels sobre BDD utilizando RSpec.
- Artículo sobre las mejores prácticas de RSpec , escrito por Jared Carroll y consultado el 24 de abril de 2011.
- Pruebas basadas en el comportamiento con RSpec. Artículo de Bruce Tate, consultado el 21 de julio de 2011.
- Herramientas gratuitas para probar software
- Software que utiliza la licencia MIT.
- Software libre programado en Ruby