Saltar al contenido

Hooks de Ciclo de Vida

En esta página

Dentro de un @suite, las funciones anotadas con los hooks de ciclo de vida preparan y limpian el estado compartido sin repetir código en cada test.

Decorator Cuándo se ejecuta
@before_all Una vez antes del primer test
@before_each Antes de cada test individual
@after_each Después de cada test individual
@after_all Una vez después del último test

El siguiente ejemplo usa un mapa compartido state para demostrar que @before_each incrementa state.n una vez por test, @after_each registra los teardowns, y @before_all se ejecuta exactamente una vez para toda la suite:

Se ejecuta con zolo test. El test segunda valida los contadores acumulados por ambos hooks para probar el orden de ejecución.

06-hooks.zolo
Playground
// Lifecycle hooks (T2): @before_each / @after_each / @before_all / @after_all.

//

// `before_each` runs before EACH test in the suite, so the shared counter

// `state.n` increments to 1 before `primeira` and to 2 before `segunda`.

@suite("contador")
mod hook_suite {
  let state = #{ "n": 0, "torn_down": 0, "setup_all": 0 }

  @before_all
  fn open() { state.setup_all = state.setup_all + 1 }

  @before_each
  fn inc() { state.n = state.n + 1 }

  @after_each
  fn teardown() { state.torn_down = state.torn_down + 1 }

  @test
  fn primeira() { expect(state.n).to_eq(1) }

  @test
  fn segunda() {
    // before_each ran twice; after_each ran once (after `primeira`);

    // before_all ran exactly once.

    expect(state.n).to_eq(2)
    expect(state.torn_down).to_eq(1)
    expect(state.setup_all).to_eq(1)
  }
}

Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.

Los hooks tienen acceso a las mismas variables declaradas en el ámbito del módulo @suite, por lo que el estado puede ser mutado libremente entre ellos y los tests.

Consulta también

Buscar en Zolo

9 resultados

enespt-br