Traducción automática
Esta página fue traducida automáticamente por IA y puede contener errores. Si algo no está claro, consulte la fuente en inglés.
Pruebas¶
El conjunto de pruebas reside en tests/, fuera del paquete pplx_export, y se ejecuta completamente sin conexión. Sus entradas con forma de API son datos simulados deterministas confirmados bajo tests/fixtures/; las pruebas no dependen de servicios en vivo ni de una configuración real a nivel de usuario.
Esta página contiene el inventario actual de módulos de prueba y el flujo de trabajo del colaborador. Para el diseño de regresiones, consulte Arquitectura del sistema de pruebas. Para el contrato de datos de entrada, consulte Accesorios de prueba.
1. Ejecución de las pruebas¶
uv run pytest tests
pytest es una dependencia de desarrollo declarada. El conjunto garantiza:
- Sin red — las entradas simuladas están verificadas; las rutas que interactúan con la red están cubiertas con simulaciones,
tmp_pathymonkeypatch. - Sin configuración real de usuario — antes de importar cualquier módulo de producción,
tests/conftest.pycrea una configuración temporal local al proceso y anulaPPLX_EXPORT_CONFIG. Cada prueba recibe entonces su propia configuraciónalice/boby restaura la configuración temporal local al proceso después. Las regresiones de subprocesos verifican que una configuración faltante o dañada del llamador no pueda romper la recolección de pruebas. - Retroalimentación rápida — al 2026-07-25 el proyecto observó 435 pruebas recolectadas de 32 módulos
test_*.pyy ejecutó el conjunto completo en aproximadamente 13–25 segundos en ejecuciones de verificación local. Los conteos son una instantánea del repositorio fechada y crecerán.
Selecciones útiles:
| Comando | Efecto |
|---|---|
uv run pytest tests |
conjunto completo |
uv run pytest tests/test_units.py |
un módulo |
uv run pytest tests -k snapshot |
pruebas cuyo id de nodo coincide con snapshot |
uv run pytest tests -x -q |
detenerse en el primer fallo, salida silenciosa |
uv run pytest --collect-only -q |
actualizar el conteo de casos recolectados |
2. Inventario actual de módulos¶
Inventario sincronizado con el repositorio el 2026-07-27:
| Familia funcional | Módulos | Propósito |
|---|---|---|
| Instantáneas de renderizado | test_render_snapshots.py |
re-renderizar todos los accesorios simulados de modo completo y escenario reducido, luego comparar los productos confirmados byte por byte |
| Utilidades centrales y compartidas | test_units.py |
estado, limitación, planificación, normalización, nombres de activos, detección de modo, rutas seguras y regresiones transversales |
| Contratos de documentación, habilidades y localización | test_agent_skills.pytest_audit_docs.pytest_translate_docs.py |
contratos de habilidades locales al repositorio más pruebas aisladas de repositorio en miniatura para el auditor de documentación de solo lectura y el pipeline de traducción automática |
| Configuración, autenticación e inicialización | test_config_external.pytest_cookie_profiles.pytest_credential.pytest_init.py |
aislamiento de configuración externa, perfiles de fuente de cookies, selección de credenciales e inicialización |
| Semántica de renderizado y flujo de trabajo | test_interruptions.pytest_stub_workflows.pytest_answer_variants.pytest_answer_variant_logging.pytest_relations.py |
atribución de flujo de trabajo, estados de interrupción, variantes de respuesta, registro de auditoría y aristas de relación |
| Mantenimiento de archivo e índice sin conexión | test_search_mode_backfill.pytest_sync_deleted.pytest_status.py |
enriquecimiento, comportamiento de reanudación/idempotencia, detección de eliminación entre cuentas, estados terminales y los niveles de informe de cambio/cuenta de estado sin conexión |
| Regresiones de revisión | 16 módulos test_fix_*.py listados abajo |
correcciones derivadas de hallazgos de revisión; los nombres de los módulos conservan el linaje de revisión |
2.1 Linaje de regresiones de revisión¶
Los identificadores de revisión explican por qué existe una regresión; no son la arquitectura principal del conjunto de pruebas. El mapeo es deliberadamente muchos a muchos: un módulo puede cubrir varios hallazgos, y un hallazgo también puede agregar casos a un módulo temático existente.
| Linaje | Módulos dedicados |
|---|---|
| Revisión N | test_fix_n01_inline_assets.py, test_fix_n02_spaces_link.py, test_fix_n03_n12.py, test_fix_n04_cookies.py, test_fix_n05_n06_n09.py, test_fix_n07_usage_checkpoint.py, test_fix_n08_throttle_overflow.py, test_fix_n10_table_header.py, test_fix_n11_batch_total.py |
| Revisión V3 | test_fix_v301_nested_sources_text.py, test_fix_v305_export_products.py |
| Revisión V4 | test_fix_v401_thread_dir_migration.py, test_fix_v402_manifest_count.py, test_fix_v403_handle_assets_idempotency.py, test_fix_v405_ask_post_steps.py |
| Revisión V5 | test_fix_v5_review.py, más adiciones enfocadas a módulos temáticos existentes |
| Revisión V6 | test_fix_v6_atomic_writes.py |
Los docstrings de los módulos siguen siendo la explicación autorizada del comportamiento anterior de cada hallazgo, el comportamiento corregido y el límite de regresión.
3. Cómo las pruebas de instantáneas reutilizan la ruta de re-renderizado de producción¶
Las pruebas de instantáneas no implementan un renderizador paralelo:
render_fixtureentests/conftest.pycopia elraw_entries.jsonsimulado de un accesorio, elraw_blocks.jsonopcional ythread.jsonen un directorio temporal.- Llama a
pplx_export.commands.rerender_cmd.rerender, la misma función utilizada porpplx-export re-render. - La fábrica de accesorios
rendereddevuelve la salida nueva y el directoriogolden/confirmado del accesorio. - Las pruebas comparan
conversation.mdy cadaturns/turn_*.mdbyte por byte.
Los invariantes de contenido complementan la igualdad de bytes: las respuestas no deben colapsar al marcador de posición (无) vacío, y los residuos de representación de dict como {'type': ... no deben filtrarse al texto renderizado.
4. Agregar una prueba¶
- Lógica existente — agregue una prueba al módulo temático correspondiente. Use
tmp_path, simulaciones ymonkeypatch; nunca acceda a la red ni a~/.configreal. - Regresión de error — prefiera el módulo temático correspondiente. Cree un módulo
test_fix_<lineage>_<slug>.pycuando conservar el linaje de revisión mejore materialmente la trazabilidad; no asuma un módulo por hallazgo. - Regresión de renderizado — agregue o reduzca un accesorio simulado, regenere sus productos de referencia con la herramienta de mantenimiento, luego regístrelo en
test_render_snapshots.pyo agregue aserciones específicas del escenario.
Siga el estilo vecino: anotaciones de tipo, from __future__ import annotations y docstrings de módulo bilingües.
5. Véase también¶
- Accesorios de prueba — entradas simuladas, productos de referencia y el contrato de mantenimiento
- Arquitectura del sistema de pruebas — capas de prueba y garantías de regresión
- Operaciones sin conexión — la ruta de re-renderizado de producción utilizada por las pruebas de instantáneas