RSpec es una herramienta de prueba de lenguaje específico de dominio de computadora (DSL) (dominio de aplicación particular) escrita en el lenguaje de programación Ruby para probar el código Ruby. [4] Es un marco de desarrollo impulsado por el comportamiento (BDD) que se utiliza ampliamente en aplicaciones de producción. La idea básica detrás de este concepto es el de desarrollo basado en pruebas (TDD), donde las pruebas se escriben primero y el desarrollo se basa en la escritura de código sólo lo suficiente que cumpla con esas pruebas seguido de refactorización . Contiene su propio marco de burla que está completamente integrado en el marco basado en JMock . [5] La simplicidad en la sintaxis RSpec la convierte en una de las herramientas de prueba más populares para aplicaciones Ruby. La herramienta RSpec se puede utilizar instalando la rspec
gema que consta de otras tres gemas, a saber rspec-core
, rspec-expectation
y rspec-mock.
[4]
Desarrollador (es) | David Chelimsky, Myron Marston, Andy Lindeman, Jon Rowe, Paul Casaretto, Sam Phippen, Bradley Schaefer [1] |
---|---|
Versión inicial | 18 de mayo de 2007 [2] |
Lanzamiento estable | 3.8.0 / 4 de agosto de 2018 [3] |
Repositorio | |
Sistema operativo | Multiplataforma |
Tipo | Marco de desarrollo impulsado por el comportamiento / herramienta de prueba |
Licencia | Licencia MIT |
Sitio web | rspec |
Historia
RSpec fue iniciado 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, es decir, RSpec 1.0, salió en mayo de 2007 y contenía muchas características principales de RSpec que también se incluyen en las últimas versiones. Sin embargo, debido a algunos problemas técnicos, como la velocidad de prueba, se suspendió más tarde. La tercera versión de RSpec, es decir, RSpec 3, se lanzó en julio de 2014 y tenía muchas características nuevas como verificar dobles , comparadores componibles y muchas más. La última versión de RSpec disponible actualmente es RSpec 3.7.
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 TDD. [6] Por ejemplo, si se consideran las palabras clave utilizadas en Test :: Unit, se pueden asignar a las palabras clave 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 grupo de ejemplo
Hay muchas palabras clave que se utilizan en el mismo contexto pero con nombres similares. La sintaxis de RSpec proporciona facilidad de lectura y describe el comportamiento del código, lo que proporciona libertad al programador. Cada marco de prueba funciona en el siguiente flujo: dado algún contexto, cuando ocurre algún evento, qué resultado se espera. Los métodos como describe (), context () y it () forman la analogía y el esqueleto respectivamente del código de prueba.
describir()
El método describe () se utiliza para describir una clase, método o grupo de ejemplo. Este es el bloque externo que realmente contiene el código de prueba y describe las características del código incluido en él. Este método toma varios argumentos y un bloque opcional. [6] Sin embargo, normalmente se utilizan uno o dos argumentos para describir el comportamiento del grupo de ejemplo. El primer argumento representa la referencia a la clase o módulo mientras que el segundo argumento es opcional cuyo tipo de datos sería String . [6] Los grupos de ejemplo también se pueden anidar. Un ejemplo del uso del método de descripción es el siguiente: [6]
describir usuario , "sin saldo de la cuenta" { .... } => usuario con ninguna cuenta de equilibrio
contexto()
El bloque context () se usa para describir el contexto en el que se usa la clase o método mencionado en el bloque describe. Esto se puede considerar como un alias de la palabra describe () en este escenario y ambos pueden usarse indistintamente. Generalmente, describe () se usa para cosas y context () se usa para contextos. Ayuda a aventurar diferentes resultados en diferentes escenarios. El ejemplo mencionado anteriormente se puede describir usando el método context () de la siguiente manera: [6]
describir Usuario do contexto "no tiene saldo de cuenta" do .... end end
[6] El uso de context () facilita la exploración de un archivo de especificaciones y aclara a qué se refiere.
eso()
Es un método RSpec que describe las especificaciones de la muestra en el contexto. El bloque it () toma una cadena como argumento y la cadena después de la palabra clave 'it' puede considerarse como la función que se espera que realice el bloque o, en otras palabras, puede considerarse como un caso de prueba. Considere el siguiente ejemplo: [6]
describir usuario hacer contexto "no tiene ningún saldo de la cuenta" do que "no está permitido para sancionar un préstamo de vivienda" hacer puts "El préstamo no puede ser sancionado debido a ningún saldo en la cuenta." fin fin fin
RSpec :: Expectativas
En RSpec, una expectativa es una declaración que expresa el estado en el que se espera que esté algo, 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 de un resultado es digamos un valor numérico 5, una expectativa de RSpec que usa el comparador igual 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 dobles de prueba que facilitan el enfoque en roles, el descubrimiento de interfaces , pero sobre todo progresar sin dependencias implementadas , proporcionando así aislamiento del acoplamiento y el no determinismo . [6]
Herramientas e integración
Hay muchas herramientas que admiten RSpec, como:
- Auto prueba
- RCov
- Editores como Vim y Emacs
- IDE como Aptana y RubyMine .
- RakeTask
- TextMate
RSpec también proporciona una serie de utilidades y puntos de extensión para admitir la extensión de RSpec para satisfacer las necesidades específicas del dominio. Por ejemplo, usar metadatos asociados con grupos y ejemplos con el propósito de informar, usar la configuración global para asignar bloques de antes y después a cada grupo de ejemplo, usar macros, etc.
Otras herramientas de prueba de Ruby
- Prueba :: Unidad
- MiniTest
- Pepino
- Debería
- Carpincho, etc.
Referencias
- ^ Equipo central de RSpec . Consultado el 8 de abril de 2013.
- ^ "todas las versiones de rspec" . rubygems.org . Consultado el 11 de febrero de 2014 .
- ^ "Versiones - rspec / rspec" . Consultado el 31 de agosto de 2018 , a través de GitHub .
- ^ a b "Introducción a RSpec | El Proyecto Odin" . www.theodinproject.com . Consultado el 18 de febrero de 2017 .
- ^ "jMock - Una biblioteca de objetos simulados expresivos para Java" . www.jmock.org . Consultado el 18 de febrero de 2017 .
- ^ a b c d e f g h yo j k "El libro RSpec: desarrollo impulsado por el comportamiento con RSpec, pepino y amigos por David Chelimsky, Dave Astels, Zach Dennis, Aslak Hellesøy, Bryan Helmkamp, Dan North | La estantería pragmática" . pragprog.com . Consultado el 11 de febrero de 2017 .
Otras lecturas
1. Introducción a RSpec: (pasos de instalación) http://rspec.info/
2. Beck, K. (2014). Desarrollo basado en pruebas con el ejemplo . Boston: Addison-Wesley.
enlaces externos
- Página web oficial
- RSpec-2
- Más allá del desarrollo impulsado por pruebas: desarrollo impulsado por el comportamiento. Un Google TechTalk de Dave Astels en BDD usando RSpec.
- Artículo de RSpec Best Practices de Jared Carroll, consultado el 24 de abril de 2011.
- Pruebas basadas en comportamiento con RSpec Artículo de Bruce Tate, consultado el 21 de julio de 2011.