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.
// 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