Ginkgo es un marco de prueba maduro para GO diseñado para ayudarlo a escribir especificaciones expresivas. Ginkgo se basa en la parte superior de GO's testing
Foundation y se complementa con la Biblioteca Gomega Matcher. Juntos, Ginkgo y Gomega te permiten expresar la intención detrás de tus especificaciones claramente:
importar ( . "github.com/onsi/ginkgo/v2". "Github.com/onsi/gomega"...)var _ = describir (" Comprobando libros fuera de la biblioteca ", etiqueta (" biblioteca "), func () {var biblioteca *bibliotecas.libraryvar book *books.bookvar Valjean *ussers.userBoreEch (func () {biblioteca = bibliotecas.newclient () book = & books.book {Título: "Les Miserables", autor: "Victor Hugo", } valjean = users.newuser ("Jean Valjean") }) When ("La biblioteca tiene el libro en cuestión", func () {antes de que la función (func (ctx specContex) {WIEPT (biblioteca.store (ctx, libro)). To (Succeed ()) }) Context ("y el libro está disponible", func () {it ("le presta al lector", func (ctx specContext) {supe (valjean.eckeckout (ctx, biblioteca, "les miserables")). (SUCCEDED ()) Esperar (valjean.books ()). A (contenedor (libro)) Esperar (biblioteca.userwithbook (ctx, libro)). A (igual (valjean))) }, SpectimeOut (Time.second * 5)) }) Contexto ("Pero el libro ya se ha verificado", func () {var javert *users.userbeforeEach (func (ctx speccontext) {javert = users.newuser ("javert") expects (javert.eckeckout (ctx, Biblioteca, "Les Miserables")). To (Succeed ()) }) It ("le dice al usuario", func (ctx speccontext) {err: = valjean.Checkout (ctx, biblioteca, "les miserables") esperar (err) .to (matchError ("Les miserables se verifica actualmente") ") ) }, SpectimeOut (Time.second * 5)) ("Permita que el usuario coloque una retención y sea notificada más tarde", func (ctx speccontext) {supe (valjean.hold (ctx, biblioteca, "les miserables")). (Succeed ()) Espere (Valjean.Holds (CTX)). TO (contenedor (libro)) por ("Cuando Javert devuelve el libro") Espere (JaVert.Return (CTX, Biblioteca, Libro)). )) Por ("eventualmente informa a Valjean") Notificación: = "Les Miserables está listo para recoger" Eventualmente (CTX, Valjean.Notificaciones). Les miserables ")). To (Succeed ()) Espere (Valjean.Books (CTX)). TO (contenedor (libro)) Espere (valjean.holds (ctx)). A (beempty ()) }, SpectimeOut (Time.second * 10)) }) }) When ("La biblioteca no tiene el libro en cuestión", func () {it ("le dice al lector que el libro no está disponible", func (ctx speccontext) {err: = valjean.eckeckout (ctx, biblioteca ", Les miserables ") esperar (err) .To (MatchError (" Les Miserables no está en el catálogo de la biblioteca ")) }, SpectimeOut (Time.second * 5)) }) })
Salta a los documentos para aprender más. Es fácil arrancar y comenzar a escribir sus primeras especificaciones.
Si tiene una pregunta, comentario, informe de errores, solicitud de funciones, etc., abra un problema de GitHub o visite el canal Ginkgo Slack.
Ya sea que escriba especificaciones de unidades básicas, especificaciones de integración complejas o incluso especificaciones de rendimiento, Ginkgo le brinda un lenguaje expresivo específico de dominio (DSL) que será familiar para los usuarios que provienen de marcos como Quick, RSPEC, Jasmine y Busted. Este estilo de prueba a veces se conoce como "desarrollo basado en el comportamiento" (BDD) aunque la utilidad de Ginkgo se extiende más allá de las pruebas a nivel de aceptación.
Con el DSL de Ginkgo, puede usar Describe
Nestable, Context
y When
los nodos de contenedores para ayudarlo a organizar sus especificaciones. BeforeEach
Y AfterEach
Nodos de configuración para la configuración y la limpieza. Specify
It
nodos sujetos que contienen sus afirmaciones. Nodos BeforeSuite
y AfterSuite
para prepararse y limpiar después de una suite ... ¡y mucho más!.
En tiempo de ejecución, Ginkgo puede ejecutar sus especificaciones en un orden reproduciblemente aleatorio y tiene un soporte sofisticado para la paralelización de especificaciones. De hecho, ejecutar especificaciones en paralelo es tan fácil como
ginkgo -p
Siguiendo patrones establecidos para escribir especificaciones paralelas, puede construir incluso suites de integración grandes y complejas que paralelizan limpiamente y funcionan perfectamente. Y no tiene que preocuparse por su suite de especificaciones colgando o dejando un desastre detrás: Ginkgo proporciona un context.Context
y la capacidad de interrumpir la especificación después de un período de tiempo establecido, y luego limpiar.
A medida que sus suites cultivan, Ginkgo lo ayuda a mantener sus especificaciones organizadas con etiquetas y le permite ejecutar fácilmente subconjuntos de especificaciones, ya sea programáticamente o en la línea de comando. Y la infraestructura de informes de Ginkgo genera salida legible por máquina en una variedad de formatos y le permite construir su propia infraestructura de informes personalizados.
Ginkgo se envía con ginkgo
, una herramienta de línea de comandos con soporte para generar, ejecutar, filtrar y perfilar suites Ginkgo. Incluso puede hacer que Ginkgo ejecute automáticamente sus especificaciones cuando detecta un cambio con ginkgo watch
, lo que permite bucles de retroalimentación rápida durante el desarrollo basado en las pruebas.
¡Y eso es solo Ginkgo! Gomega trae una familia rica, madura y de afirmaciones y mates a sus suites. Con Gomega puede mezclar fácilmente afirmaciones síncronas y asincrónicas en sus especificaciones. Incluso puede construir su propio conjunto de combaters expresivos específicos de dominio de forma rápida y fácil componiendo los bloques de construcción existentes de Gomega.
¡Felices pruebas!
Ginkgo tiene licencia de MIT
Ver contribuyente.md