Pular para o conteúdo

Hooks de Ciclo de Vida

Nesta página

Dentro de um @suite, funções anotadas com os hooks de ciclo de vida preparam e limpam o estado compartilhado sem repetir código em cada teste.

Decorator Quando roda
@before_all Uma vez antes do primeiro teste
@before_each Antes de cada teste individual
@after_each Depois de cada teste individual
@after_all Uma vez após o último teste

O exemplo abaixo usa um mapa compartilhado state para demonstrar que @before_each incrementa state.n uma vez por teste, @after_each registra teardowns, e @before_all roda exatamente uma vez para toda a suíte:

Executa via zolo test. O teste segunda valida os contadores acumulados por ambos os hooks para provar a ordem de execução.

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)
  }
}

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Os hooks têm acesso às mesmas variáveis declaradas no escopo do módulo @suite, por isso o estado pode ser mutado livremente entre eles e os testes.

Veja também

Buscar no Zolo

9 resultados

enespt-br