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 2O que conferir#
| Pergunta | Como |
|---|---|
| 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 |