Pular para o conteúdo

Testar código reativo

Escrever, ler, contar execuções — e aguardar o recurso sem sleep arbitrário.

O modelo reativo é síncrono por padrão: escrever num sinal recalcula os derivados e roda os efeitos antes de a escrita voltar. Isso torna o teste direto — sem esperar, sem relógio.

dataforge
adopt Arcane.Reativo as R

preco := R.sinal(10)
qtd := R.sinal(2)
contas := [0]

action calcular():
    contas[0] += 1
    yield preco.ler() * qtd.ler()

total := R.derivado(calcular)

assert total.ler() is 20
assert total.ler() is 20
assert contas[0] is 1              // memorizado: duas leituras, uma conta
qtd.escrever(2)                     // o mesmo valor
assert total.ler() is 20 and contas[0] is 1
qtd.escrever(3)
assert total.ler() is 30 and contas[0] is 2

O que conferir#

PerguntaComo
o valor está certo?derivado.ler() depois de escrever
recalcula à toa?contar as execuções da fórmula
o efeito viu um estado intermediário?guardar o que ele viu numa lista, e comparar
vazou?sinal.ouvintes() depois de parar
o recurso terminou?r.aguardar(prazo) — espera o estado, e não um tempo fixo