ruby - and - rspec describe
¿Cuál es el argumento en contra de usar before, let y subject en las pruebas de RSpec? (2)
Evite su, let, let !, especificar, before y subject.
De Verdad? Eso corta las piernas desde debajo del RSpec DSL. También podría volver a usar la prueba / unidad.
En cuanto a por qué evitan let
, Thoughtbot dice: "Tenemos una publicación de blog que saldrá antes de mucho tiempo y que con suerte explicará". Esperaré con interés por esas perlas de sabiduría, pero mientras tanto, tome la guía de estilo con un grano de sal.
EDITAR
La publicación de blog mencionada es una lectura interesante.
Empecé a escribir pruebas de RSpec y encontré la Guía de estilo de thinkbot , que recomienda no let
, let!
, before
y subject
(entre otros).
También he leído sugerencias similares en algunos otros lugares (incluidos los viejos documentos de RSpec que advierten sobre before(:all)
), pero parece que no puedo encontrar el argumento real en contra de ellos.
Entonces la pregunta es:
¿Por qué no debería estar usando esos métodos en mis pruebas? ¿Cuál es el mejor enfoque?
Interesante pregunta; algo sobre lo que también quiero saber más ... Así que profundicé un poco, y esto es lo que descubrí:
Thictum de la guía de estilo Thoughtbot sobre let
, etc.
En una versión anterior de la guía de estilo , hay más en esa declaración:
Evite su, let, let !, especificar, subject y otras DSL. Prefiere explicitud y consistencia.
Las personas de ThoughtBot hicieron una publicación en Let Let Let ''s not . Ver también el enlace a Github Commit Comment conversation
En uno de sus podcasts recientes, Joe Ferris , el CTO de ThoughtBot, explica por qué no es una buena idea usar
let
ysubject
. Mira el podcast titulado Something Else Was Smellier de la marca 27m37s en adelante durante los próximos 5 minutos.Probar Anti-patrón ''Mystery Guest'', que se trata en detalle en un blog de ThoughtBot más antiguo, es la razón principal de por qué no usar
let
y sus primos.
Para resumir mi comprensión de todo lo anterior muy sucintamente:
Usar
let
et al hace que sea difícil comprender lo que está sucediendo dentro de la prueba de un vistazo rápido, y requiere que la persona dedique algo de tiempo a establecer las conexiones.Escriba pruebas de tal manera que sea fácil de entender sin mucho esfuerzo.
Además, el uso liberal de las pruebas da como resultado una sobredistribución entre las pruebas, así como el establecimiento de elementos
common fixtures
implícitos, es decir, tener un dispositivo común para comenzar para cada prueba que se escribe, incluso cuando no se aplica.
antes de todo)
El argumento en contra del uso before(:all)
es directo. Como se explica en la antigua documentación de rspec :
Advertencia: el uso de before (: all) y after (: all) generalmente se desaconseja porque introduce dependencias entre los Ejemplos. Aún así, podría ser útil para operaciones muy costosas si sabe lo que está haciendo.
before (: all) se ejecuta solo una vez al comienzo del ExampleGroup. Como tal, existe la posibilidad de introducir inadvertidamente dependencias entre los ejemplos. La afirmación de Thoughtbot de que las pruebas no son fáciles de entender se aplica a esto también.
En conclusión, el consejo para escribir mejores especificaciones parece ser:
- Escriba pruebas de manera que sean fáciles de entender de un vistazo rápido.
- Sepa lo que está haciendo