Pular para o conteúdo

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 0

O 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:

DefeitoPorque o Kiln.test não vê
corrida entre pedidostudo roda numa thread só — ver o aviso escrita-concorrente
cookie que o navegador descartaKiln.test não devolve cookies
--host=0.0.0.0 esquecido no contêinernão há rede

Continue em A pirâmide.