Ir al contenido principal
Versión: 6.0

Introducción a las Extensiones

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Las extensiones son ganchos del ciclo de vida reutilizables. De hecho, los ganchos del ciclo de vida se representan internamente como instancias de extensiones. En el pasado, Kotest utilizaba el término listener para interfaces simples y extension para interfaces más avanzadas, sin embargo, no existe distinción entre ambos y los términos pueden usarse indistintamente.

Creación de una extensión

El uso básico consiste en crear una implementación de la interfaz de extensión requerida y registrarla para una prueba, un spec o a nivel global del proyecto en ProjectConfig.

Por ejemplo, aquí definimos un BeforeSpecListener y un AfterSpecListener, y lo registramos en un spec.

class MyTestListener : BeforeSpecListener, AfterSpecListener {
override suspend fun beforeSpec(spec:Spec) {
// power up kafka
}
override suspend fun afterSpec(spec: Spec) {
// shutdown kafka
}
}


class TestSpec : FreeSpec({
extension(MyTestListener())
// tests here
})

Cualquier extensión registrada dentro de un Spec se aplicará a todas las pruebas de ese spec (incluyendo factorías de pruebas y pruebas anidadas).

Para ejecutar una extensión en cada spec de todo el proyecto, puedes registrar el listener mediante la configuración del proyecto.
Aquí tienes un ejemplo del MyTestListener anterior registrado a nivel del proyecto, que se aplicaría a todos los specs.

object ProjectConfig : AbstractProjectConfig {
override val extensions = listOf(MyTestListener())
}
precaución

Algunas extensiones solo pueden registrarse a nivel del proyecto. Por ejemplo, registrar un BeforeProjectListener dentro de un spec no tendrá efecto, ya que el proyecto ya habrá comenzado cuando se encuentre esa extensión.