Criando testes
Peça ao seu agente para escrever um teste. Esta página explica o que ele escreve e como criar bons testes.
Estrutura
Os testes ficam em tests/ na branch clonada do seu app.
tests/
components/login.ts component("login", ...) reusable step sequence
agency/create_agency.ts test("create_agency", ...) folder "agency"
smoke.ts test("smoke", ...) no folderUm teste
import { test, step, el, reusable, rg, agent } from "@buildprint/bubblescript/testing";
import { login } from "../components/login";
const profile = reusable("1733534664547x312777107866957900");
const createButton = profile.el("1739714784407x550193182934337150");
export default test("create_agency", {
name: "Create an agency from the profile tab",
description: "A user with no agency creates one and lands on the Agency tab.",
viewport: "desktop",
requires: [createButton],
setup: [
step({
name: "Clear the tester's agency",
run: `buildprint data update User "$(buildprint data search User --constraint "field=email op=equals [email protected]" --json | jq -r '.result.responses[0].hits.hits[0]._source._id')" --set Agency=`,
}),
],
steps: [
login({ email: "[email protected]", page: "dashboard?tab=Profile" }),
step({ name: "Click Create agency", run: `agent-browser click ${createButton}` }),
step({
name: "Wait for the agency form",
run: `agent-browser wait ${profile.el("1739714572204x365566571452809800")}`,
}),
step({ name: "URL switched to the Agency tab", run: `agent-browser get url | grep -q "tab=Agency"` }),
step({
name: "Exactly one Agency record was created",
run: `buildprint data search Agency --constraint "field=name op=equals value=Test $BUILDPRINT_TEST_RUN_ID" --json | jq -e '.result.responses[0].hits.total == 1'`,
timeoutMs: 15000,
}),
agent({
name: "Team section lists the current user as admin",
task: "Check the Team section lists the current user as admin",
context: "You are on the Agency tab. The Team section is below the agency name.",
pass: "[email protected] appears in the Team list with the role Admin.",
fail: "The Team section is missing, empty, or shows a role other than Admin.",
}),
],
teardown: [
step({
name: "Delete the test agency",
run: `buildprint data search Agency --constraint "field=name op=equals value=Test $BUILDPRINT_TEST_RUN_ID" --json | jq -r '.result.responses[0].hits.hits[]._source._id' | xargs -r buildprint data delete --confirm`,
onFailure: "continue",
}),
],
});As partes
Parte | O que faz |
|---|---|
| Declara o teste. |
| Um comando do shell. É executado com |
| Pausa a execução e pede ao seu agente que decida usando o contexto fornecido. Permitido apenas em |
| Etapas executadas antes e depois. Use-as para criar e remover dados de teste. |
| Elementos, páginas, workflows, conjuntos de opções ou tipos de dados necessários para o teste. Se estiverem ausentes em uma branch, o teste ficará inativo nela. |
|
|
|
|
Componente |
|
Seletores
Buildprint adiciona o ID do elemento a cada elemento Bubble no modo de execução. el("<id>") se torna um seletor estável. Não use as classes próprias do Bubble, pois elas mudam durante a execução.
Elementos dentro de um reusable:
reusable("<instance id>").el("<child id>").Células de grupos repetidos:
rg("<rg id>").row(1).el("<child id>"). As linhas começam em 1.Pop-ups são renderizados no nível superior da página. Restrinja os elementos filhos do pop-up usando o próprio ID da instância do pop-up.
Elementos ocultos não ficam na página até serem exibidos. Sempre execute
agent-browser wait <selector>após a ação que os revela.
Encontre os IDs dos elementos em pages/<page>/page.ts ou execute:
buildprint test el <element id>Ele exibe o seletor, a página ou reusable ao qual pertence e se é necessário restringir o escopo.
Ambiente dentro de uma etapa
Variável | Valor |
|---|---|
| A sessão do navegador da execução. |
| ID do app, branch e |
| Por exemplo, |
| JSON para |
| Único para cada execução. Use-o para nomear dados de teste. |
| As capturas de tela salvas aqui são anexadas à execução. |
Asserções
Coloque cada verificação em sua própria etapa.
Texto:
test "$(agent-browser get text ${el})" = "Expected"URL:
agent-browser get url | grep -q "tab=Agency"Visibilidade:
agent-browser is visible ${el} | grep -q trueDados:
buildprint data search Type --constraint "field=name op=equals value=X" --json | jq -e '.result.responses[0].hits.total == 1'
Verificar e aplicar
buildprint check
buildprint applycheck informa quaisquer erros do compilador, incluindo o arquivo e a linha. apply envia o teste para o Buildprint. O executor sempre executa a versão aplicada. Se você editar um arquivo e executá-lo sem apply, o executor avisará e executará a versão antiga.
Depurar uma etapa com falha
Abra a execução no Buildprint. A etapa com falha mostra a saída e uma captura de tela.
Se um seletor não corresponder, por exemplo, execute
buildprint test el <id>e compare o resultado com a etapa.Se a execução estiver pausada em uma etapa do agente, tente a correção como um comando antes de editar o arquivo:
buildprint test step <runId> pass --script 'agent-browser is visible [data-bp-el="..."] | grep -q true'A CLI armazena o script na execução e exibe um step() que você pode colar no lugar da chamada agent(). Edite o arquivo e depois execute check e apply.