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#
| Chamada | Faz |
|---|---|
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#
| Chamada | Devolve |
|---|---|
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.