Tests y capturas
app.screenshot(ruta) dibuja el estado actual de la app fuera de pantalla y guarda un PNG.
No necesita ventana, display ni GPU (usa el renderizador por software), así que funciona en CI.
app = MiApp()app.items = ["uno", "dos"] # prepara el estado que quieras mostrarapp.screenshot("docs/lista.png", size=(480, 320), scale=2)size: tamaño lógico; por defectoApp.size.scale: densidad del PNG (2 = retina).wait: segundos a esperar antes de capturar, por sion_startlanzó trabajo.
Todas las imágenes de esta documentación se generan así:
uv run python examples/screenshots.py # capturas grandes (docs/screenshots)uv run python docs/scripts/component_shots.py # ilustraciones de componentespython examples/screenshots.py # capturas grandes (docs/screenshots)python docs/scripts/component_shots.py # ilustraciones de componentespython3 examples/screenshots.py # capturas grandes (docs/screenshots)python3 docs/scripts/component_shots.py # ilustraciones de componentespy examples/screenshots.py # capturas grandes (docs/screenshots)py docs/scripts/component_shots.py # ilustraciones de componentesProbar la lógica
Sección titulada «Probar la lógica»Como el estado vive en tu objeto, update y los callbacks se prueban como Python normal:
def test_counter(): app = Counter() app.update("increment") app.update("increment") assert app.count == 2Probar que la vista se dibuja
Sección titulada «Probar que la vista se dibuja»view() debe devolver un Widget sin lanzar excepciones. Una captura es una buena prueba de humo:
def test_view_renders(tmp_path): app = MiApp() app.screenshot(tmp_path / "ui.png", size=(800, 600)) assert (tmp_path / "ui.png").stat().st_size > 0Si view() lanza, la captura muestra el traceback en lugar de la interfaz, igual que la ventana.