2012-05-23 22 views
10

Soy un principiante en Ruby y tuve esta pregunta fastidiándome durante mucho tiempo.¿Cuál es exactamente la palabra clave "debería" en RSpec Ruby

En un archivo RSpec, si escribimos Book.should <do something>, ¿cuál es la palabra clave should? ¿Es un miembro del objeto Libro? ¿Cómo llegó a ser el miembro del objeto Libro? ¿O es alguna construcción de Ruby? ¿Es una función? ¿Dónde puedo encontrar la definición de esto si se trata de una función o miembro?

+1

Esta pregunta es el duplicado de http://stackoverflow.com/questions/3105755/ruby-metaprogramming-how-does-rspecs-should-work –

+0

El enlace no explica lo que realmente hace. ¿Qué es exactamente la palabra clave "debería"? – woodstok

+3

+1 por tratar de entender la magia. –

Respuesta

11

Al cargar, RSpec incluye a module en el módulo Kernel que se incluye en todos los objetos conocidos por Ruby. Por lo tanto, puede hacer que el método should esté disponible para todos los objetos. Como tal, should no es una palabra clave (como if, class, o end), sino un método ordinario.

Tenga en cuenta que esa mezcla solo está disponible en contextos RSpec ya que está "parcheada" durante la carga o RSpec.

+0

Eso era lo que estaba buscando. Gracias – woodstok

3

He respondido una pregunta similar a esta here. Básicamente:

Lo que creo que la respuesta de Holger podría hacer más explícito, y lo que inicialmente puede confundirte, es que should rompe la mayoría de las convenciones usuales para nombrar métodos (nada sobre el método describe lo que hace, por ejemplo) para hacer que el código como un todo se lea como una especie de oración.

Así que, en lugar de simplemente crear un conjunto de pruebas, la biblioteca intenta alentarlo a describir su aplicación mediante pruebas de una manera que se asemeja a una especificación humana legible.

+1

bien. ¿Qué debería hacer internamente? – woodstok

+2

Crea una afirmación de que una condición es verdadera y se ejecutará como parte de su prueba. Por lo tanto, es similar a decir 'afirmar x == y'. – Russell

Cuestiones relacionadas