El BDD se ofrece como respuesta a las limitantes del TDD, es una manera nueva de describir comportamiento mas que a las pruebas que acompañan el software.
- Los enunciados inician por "should"
- Describe comportamiento y no pruebas
- Determinar el siguiente comportamiento mas importante
- Los requerimientos son pruebas también
Jasmine es un marco de trabajo de BDD para probar código Javascript
- No depende de ningún otro marco de trabajo
- No requiere un DOM
- Nos permite realizar pruebas de manera limpia y obvia
Alternativas: JSpec, JSSpec, Screw.Unit
Una suite de pruebas comienza por la función describe
con dos parámetros, una cadena ( string ) y una función.
La cadena es el nombre de la suite, y la función es el código que la implementa.
Las especificaciones o "Specs" se definen con la función it
, muy parecida a describe utiliza una cadena y la función del spec ( o prueba ).
Un spec puede tener una o mas expectativas que prueban el estado del código dentro de la prueba.
Una expectativa en Jasmine es una aseveración de que algo es verdadero o falso. Un spec con todas sus expectativas verdaderas significan que el spec es satisfactorio. Un spec con una o mas expectativas que evalúen a falso, es un spec que fallo.
describe("A suite", function() {
it("contains spec with an expectation", function() {
expect(true).toBe(true);
}
}
Jasmine nos dice que describe
e it
son solo funciones, pueden contener código necesario para implementar la prueba. Las reglas de "scope" de Javascript aplican aquí, así que si se declara algo dentro de un describe
este estará disponible a los bloques it
dentro de la suite.
Se construyen con la función expect
que toma un valor llamado actual
. y se encadena con una función matcher
con el valor esperado.
Cada matcher toma una comparación booleana que le reporta a Jasmine si la expectativa fue falsa o verdadera. se puede evaluar a false
si se utiliza not
antes de llamar al matcher.
Todos comienzan con el código expect(foo).
toEqual(bar);
compara objetos o primitivos defoo
ybar
y es satisfactorio si son equivalentes.toBe(bar)
pasa sifoo
ybar
son el mismo objeto.toBeDefined()
pasa sifoo
no esundefined
por mostrar algunos. la lista completa la podemos observar en Jasmine Matchers así como un ejemplo de construir uno personalizado.
- Podemos agrupar specs dentro de suites, el nombre de la suite se combinara junto con el del spec. El nombre resultante sera el nombre completo del spec.
- Se puede ejecutar código antes y después de cada spec dentro de una suite utilizando las funciones
beforeEach
yAfterEach
- Otra característica importante es que podemos anidar funciones
describe
dentro de otras
Los espías son los "dobles" de las pruebas nos permiten espiar, falsificar y realizar "mocks". Un espía reemplaza a la función que esta espiando.
toHaveBeenCalled
verdadero si el espía ha sido llamado.toHaveBeenCalledWith
verdadero si la lista de argumentos corresponde a la lista de argumentos para cualquiera de las llamadas grabadas al espía.
- Los specs se escriben con llamadas a
runs
, que usualmente terminan con una llamada asíncrona. - El bloque
waitsFor
toma una función que se ejecuta repetidamente hasta que regrese verdadero o expire el limite de tiempo. Si expira el spec falla. - Finalmente otro
runs
define el comportamiento final de la prueba, usualmente expectativas basadas en lo que regrese la llamada asíncrona.
Se debe incluir Jasmine a un ambiente Javascript para que pueda ejecutarse. El objeto HTMLReporter proporciona resultados de cada suite y de cada spec.
- De manera autónoma
- Como gem de Ruby
- Para Node.js
- Java
- Django
- .NET
-
Google group http://groups.google.com/group/jasmine-js
-
Twitter http://twitter.com/JasmineBDD
-
Espías - Jasmine wiki Spies
Aviso de excención: Tijuana.js no esta asociado con Jasmine o Pivotal de ninguna manera
Jasmine es software Open Source bajo la licencia MIT
Jasmine es una marca de Pivotal Labs.
Logos y marcas son propiedad de sus respectivos propietarios.