RSpec - Sintaxis básica

Echemos un vistazo más de cerca al código de nuestro HelloWorldejemplo. Primero que nada, en caso de que no esté claro, estamos probando la funcionalidad delHelloWorldclase. Esto, por supuesto, es una clase muy simple que contiene solo un métodosay_hello().

Aquí está el código RSpec de nuevo:

describe HelloWorld do 
   context “When testing the HelloWorld class” do 
      
      it "The say_hello method should return 'Hello World'" do 
         hw = HelloWorld.new 
         message = hw.say_hello 
         expect(message).to eq "Hello World!" 
      end
      
   end 
end

La palabra clave describe

La palabra describees una palabra clave RSpec. Se utiliza para definir un "Grupo de ejemplo". Puede pensar en un "Grupo de ejemplo" como una colección de pruebas. losdescribeLa palabra clave puede tomar un nombre de clase y / o un argumento de cadena. También necesita pasar un argumento de bloque adescribe, este contendrá las pruebas individuales, o como se las conoce en RSpec, los “Ejemplos”. El bloque es solo un bloque Ruby designado por Rubydo/end palabras clave.

La palabra clave de contexto

los context la palabra clave es similar a describe. También puede aceptar un nombre de clase y / o un argumento de cadena. Deberías usar un bloque concontexttambién. La idea de contexto es que encierra pruebas de cierto tipo.

Por ejemplo, puede especificar grupos de ejemplos con diferentes contextos como este:

context “When passing bad parameters to the foobar() method” 
context “When passing valid parameters to the foobar() method” 
context “When testing corner cases with the foobar() method”

los context La palabra clave no es obligatoria, pero ayuda a agregar más detalles sobre los ejemplos que contiene.

La palabra clave it

La palabra ites otra palabra clave RSpec que se utiliza para definir un "Ejemplo". Un ejemplo es básicamente una prueba o un caso de prueba. De nuevo, comodescribe y context, it acepta tanto el nombre de clase como los argumentos de cadena y debe usarse con un argumento de bloque, designado con do/end. En el caso deit, es costumbre pasar solo una cadena y un argumento de bloque. El argumento de cadena a menudo usa la palabra "debería" y está destinado a describir qué comportamiento específico debería ocurrir dentro delit block. En otras palabras, describe que el resultado esperado es para el Ejemplo.

Nota la it block de nuestro ejemplo HelloWorld -

it "The say_hello method should return 'Hello World'" do

La cadena deja en claro lo que debería suceder cuando llamamos a say hello en una instancia de la clase HelloWorld. Esta parte de la filosofía RSpec, un ejemplo, no es solo una prueba, también es una especificación (una especificación). En otras palabras, un ejemplo documenta y prueba el comportamiento esperado de su código Ruby.

La palabra clave esperada

los expectLa palabra clave se utiliza para definir una "Expectativa" en RSpec. Este es un paso de verificación en el que verificamos que se haya cumplido una condición esperada específica.

De nuestro ejemplo de HelloWorld, tenemos:

expect(message).to eql "Hello World!"

La idea con expectdeclaraciones es que se leen como en inglés normal. Puede decir esto en voz alta como "Espere que el mensaje de la variable sea igual a la cadena 'Hola mundo'". La idea es que sea descriptivo y fácil de leer, incluso para las partes interesadas no técnicas, como los directores de proyectos.

The to keyword

los to la palabra clave se utiliza como parte de expectdeclaraciones. Tenga en cuenta que también puede utilizarnot_topalabra clave para expresar lo contrario, cuando desee que la expectativa sea falsa. Puede ver que se usa to con un punto,expect(message).to,porque en realidad es solo un método Ruby normal. De hecho, todas las palabras clave RSpec son en realidad solo métodos Ruby.

The eql keyword

los eqlLa palabra clave es una palabra clave RSpec especial llamada Matcher. Utiliza Matchers para especificar qué tipo de condición está probando para que sea verdadera (o falsa).

En nuestro HelloWorld expect declaración, está claro que eqlsignifica igualdad de cadenas. Tenga en cuenta que hay diferentes tipos de operadores de igualdad en Ruby y, en consecuencia, diferentes Matchers correspondientes en RSpec. Exploraremos los diferentes tipos de Matchers en una sección posterior.