Testes ponta a ponta
O programa rodando como o usuário o roda — subprocesso, código de saída e o que só aparece com socket.
O teste ponta a ponta executa o programa como ele é executado: dataforge run, argumentos, saída no terminal, código de saída. Ele é lento e diz pouco sobre onde está o defeito — e pega o que nenhum outro pega: o main.df que não liga as peças, a variável de ambiente que falta, o código de saída zero numa falha.
A CLI inteira, por subprocesso#
dataforge
adopt Arcane.Crucible
adopt Arcane.IO as IO
adopt Arcane.OS as OS
adopt Arcane.Process as P
pasta := $"{OS.temp_dir()}/df-e2e-{randint(100000, 999999)}"
IO.mkdir(pasta)
programa := $"{pasta}/somar.df"
IO.write(programa, """adopt Arcane.OS as OS
args := OS.argv()
given len(args) is not 2:
out "uso: somar A B"
OS.exit(2)
out int(args[0]) + int(args[1])
""")
crucible "somar, de fora":
trial "imprime a soma e sai com 0":
r := P.run(["dataforge", "run", programa, "--", "2", "40"])
expect r["code"] is 0
expect r["stdout"].trim() is "42"
trial "sem argumentos, sai com 2 e diz o uso":
r := P.run(["dataforge", "run", programa])
expect r["code"] is 2
expect "uso" in r["stdout"]
r := Crucible.run()
IO.remove_tree(pasta)
assert r["falhou"] is 0O que só aparece com socket#
Kiln.test roda a rota na mesma thread, sem socket. Três classes de defeito ficam de fora e só aparecem subindo o servidor de verdade:
| Defeito | Porque o Kiln.test não vê |
|---|---|
| corrida entre pedidos | tudo roda numa thread só — ver o aviso escrita-concorrente |
| cookie que o navegador descarta | Kiln.test não devolve cookies |
--host=0.0.0.0 esquecido no contêiner | não há rede |
Continue em A pirâmide.