O ponto de entrada
app.df monta, main.df sobe — e por que importar um módulo não pode ter efeito.
Todo código no topo de um módulo roda no adopt. Por isso um módulo que sobe um servidor no topo trava qualquer teste que o importe: o teste nunca termina. A regra é separar quem monta de quem roda.
text
projeto/
forge.toml entry = "src/main.df"
src/
app.df monta: rotas, regras — sem efeito no topo
main.df roda: le o ambiente, 'ignite', 'OS.exit'
tests/
app_test.df adopt ../src/app — e nada sobedataforge
// app.df — so declara
adopt Kiln
server api on 0:
route GET "/":
respond json {"ok": yes}
// main.df — o unico com efeito
// adopt ./app as App
// ignite App.api at "0.0.0.0"
r := Kiln.test(api, "GET", "/")
assert r["status"] is 200| No topo de um módulo | Pode? |
|---|---|
| declarar ações, records, constantes | sim |
| abrir uma conexão preguiçosa | sim — uma ação que abre no primeiro uso |
subir servidor, ler input, OS.exit | não — só no ponto de entrada |
| imprimir | evite: aparece em todo teste que importar |