Pular para o conteúdo

Testar sem navegador

A sonda clica, digita e pergunta; e o pedido HTTP roda sem socket.

O framework foi desenhado para isto: a árvore de componentes é um dado, e conferir um dado é o que um teste sabe fazer.

dataforge
adopt Arcane.Vitrine as V
adopt Crucible

action painel():
    V.titulo("Painel")
    given V.botao("Somar"):
        V.estado.somar("total")
    V.metrica("Total", V.estado.obter("total", 0))

crucible "o painel":
    trial "o botão soma":
        t := V.testar(painel)
        t.clicar("Somar")
        assert t.metrica("Total") is "1"

    trial "e não soma sozinho":
        t := V.testar(painel)
        t.rodar()
        assert t.metrica("Total") is "0"

Agir#

ChamadaFaz
t.clicar(rótulo)clica no botão e roda a página de novo
t.digitar(rótulo, valor)preenche um campo
t.marcar(rótulo, yes)liga uma caixa ou interruptor
t.selecionar(rótulo, valor)escolhe numa lista
t.abrir_aba(rótulo)troca de aba
t.enviar(formulário)aperta o botão de envio
t.enviar_arquivo(rótulo, nome, conteúdo)simula um upload
t.ir_para(caminho)vai para outra página
t.rodar()roda de novo, sem interação

Perguntar#

ChamadaDevolve
t.texto()a página como texto corrido — para assert "erro" in …
t.achar(tipo)todos os nós de um tipo
t.primeiro(tipo)o primeiro
t.quantos(tipo)quantos existem
t.existe(tipo, rótulo)yes/no
t.metrica(rótulo)o valor de uma métrica
t.valor(rótulo)o valor de um campo
t.alertas(nível)as mensagens de sucesso, erro, aviso
t.estado(chave)o estado da sessão
t.falhou() · t.falhas()se algo disparou, e o quê
t.html() · t.arvore()a página como HTML, ou como vault

Quando um rótulo não existe, a mensagem lista os que existem na página — o erro mais comum ao escrever um teste é errar o texto do botão.

HTTP de verdade, sem socket#

A sonda pula o HTTP. Para testar status, cabeçalho e redirecionamento, V.pedir:

dataforge
r := V.pedir(app, "GET", "/")
assert r["status"] is 200
assert r["headers"]["X-Content-Type-Options"] is "nosniff"

r2 := V.pedir(app, "GET", "/produto/42")
assert "Produto 42" in r2["body"]

É o Kiln.test por baixo: executa a rota inteira, com middleware, sem abrir porta nenhuma.