# Detector de grafo de dependencias de fixtures pytest y fugas de mock.patch

Analiza estáticamente una cadena de conftest.py: renderiza el grafo de dependencias de fixtures con sus cinco ámbitos (function/class/module/package/session), detecta overrides de conftests más profundos y marca fugas de estado entre tests: mock.patch().start() sin .stop(), monkeypatch en fixtures de ámbito amplio (su deshacer a nivel función nunca se ejecuta) y with mock.patch mantenido abierto a través de yield.

> Página canónica: https://elysiatools.com/es/tools/pytest-conftest-fixture-dependency-graph-and-mock-patch-leak-detector

- **Categoría:** Development

- **Palabras clave:** pytest, conftest, fixture, grafo de dependencias, fuga de mock.patch, monkeypatch, desajuste de ámbito, fixture de sesión, contaminación entre tests, análisis estático, testing python, ámbito de fixture

## Descripción general

Reglas según la documentación oficial de pytest: orden de ámbitos session > package > module > class > function; una fixture de ámbito amplio que dependa de otra más estrecha lanza ScopeMismatch en la recolección; las fixtures con el mismo nombre se resuelven desde el test hacia fuera, ganando el conftest más profundo. Detección de fugas: las fixtures integradas (monkeypatch/capsys/tmp_path…) son de ámbito función y su deshacer solo ocurre a ese nivel — usarlas en fixtures de ámbito module/session deja el parche activo toda la sesión (clase de problema del issue #84 de pytest-mock); patcher.start() sin .stop() vive hasta el final del proceso; with mock.patch a través de un yield en ámbito amplio hace que todos los tests vean el objetivo parcheado. El parser es un escáner ligero de Python (cadenas/comillas triples/comentarios tratados correctamente), sin runtime de Python. Separa varios archivos pegados con marcadores «# --- file: tests/unit/conftest.py ---».

## Entradas

- **Fuentes Python (cadena de conftest)** (textarea): # --- file: conftest.py --- import pytest @pytest.fixture(scope="session") def db(): yield 1 …
- **Archivo Python (opcional, .py/.txt)** (file)
- **Mostrar nodos de fixtures integrados** (checkbox)

## Cuándo usarlo

- Cuando se producen fallos intermitentes o efectos secundarios inexplicables entre tests tras ejecutar suites completas.
- Al organizar conftest.py jerárquicos y necesitar validar desajustes de ámbito (ScopeMismatch) o sobrescrituras de fixtures.
- Para auditar parches de mock o monkeypatch que no limpian su estado y quedan activos durante toda la sesión.

## Cómo funciona

- Pega el código de uno o varios conftest.py (o sube un archivo .py/.txt) usando separadores de ruta '# --- file: ruta ---'.
- El analizador estático escanea la jerarquía de llamadas, detecta los cinco ámbitos de fixtures y verifica dependencias de mayor a menor alcance.
- Examina llamadas a mock.patch().start(), bloques with mock.patch y el uso de monkeypatch en ámbitos no funcionales para reportar alertas y graficar las dependencias.

## Casos de uso

- Depurar suites de tests con contaminación cruzada provocada por parches no detenidos con .stop().
- Visualizar y documentar el grafo de fixtures e inyección de dependencias en proyectos grandes con pytest.
- Revisar pull requests que introducen fixtures globales para evitar desajustes de alcance antes de integrarlos al CI.

## Preguntas frecuentes

### ¿Por qué es problemático usar monkeypatch en fixtures con ámbito de módulo o sesión?

monkeypatch es una fixture de ámbito función; su teardown automático no se ejecuta al terminar fixtures de módulo o sesión, dejando modificaciones activas en el resto de los tests.

### ¿Qué provoca un error ScopeMismatch en pytest?

Ocurre cuando una fixture con un ámbito más amplio (como session o module) declara una dependencia de una fixture con un ámbito más estrecho (como function).

### ¿Cómo se analizan múltiples archivos conftest.py simultáneamente?

Debes separar cada bloque de código en el área de texto anteponiendo la cabecera '# --- file: ruta/al/conftest.py ---'.

### ¿La herramienta ejecuta el código Python para validar los mocks?

No, realiza un análisis estático del código fuente sin invocar el intérprete de Python ni ejecutar dependencias.

### ¿Qué indica una advertencia sobre mock.patch a través de yield?

Indica que un bloque 'with mock.patch' envuelve la sentencia 'yield' en una fixture amplia, manteniendo el parche activo para todos los tests que compartan dicho ámbito.

## Herramientas relacionadas

- [Reconstructor de potencia crítica y W′bal para running (Stryd)](https://elysiatools.com/es/tools/stryd-running-power-critical-power-and-w-prime-bal-reconstructor): Deriva CP y W′ de un test de 3 minutos, pares potencia–tiempo o pruebas distancia–tiempo, y repite una sesión de potencia Stryd (.fit/.tcx/CSV): W′bal según los modelos integral de Skiba 2012 y diferencial de Froncioni/Skiba/Clarke, previsión de agotamiento, zonas Stryd y gráfico doble.
- [Constructor de ejes e instancias de fuentes variables y CSS font-variation-settings](https://elysiatools.com/es/tools/variable-font-axis-instance-and-css-font-variation-settings-builder): Sube una fuente variable (TTF/OTF/WOFF/WOFF2) para inspeccionar sus ejes fvar e instancias con nombre, previsualizar la interpolación en vivo en el navegador y generar CSS font-variation-settings listo para pegar, las propiedades de alto nivel equivalentes y un bloque @font-face variable.
- [Visualizador de Plan de Ejecución SQL](https://elysiatools.com/es/tools/sql-explain-plan-visualizer): Pega la salida de EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) para renderizar un árbol de costos, marcar divergencias entre filas estimadas y reales, y sugerir índices
- [Inspector de cabeceras binarias Windows PE / Linux ELF / Mach-O (secciones, importaciones/exportaciones)](https://elysiatools.com/es/tools/windows-pe-linux-elf-mach-o-binary-header-section-import-export-inspector): Sube un binario PE-COFF (.exe/.dll), ELF o Mach-O: analiza cabeceras DOS/PE/COFF/opcional, e_ident y tablas de ELF, y la cabecera y órdenes de carga de Mach-O; muestra punto de entrada/base de imagen, tabla de secciones con mapeo RVA↔offset, importaciones/exportaciones, símbolos dinámicos y reubicaciones, anotaciones multiarquitectura (x86/x86-64/ARM/AArch64/RISC-V), insignias ASLR/NX/PIE y un volcado hexadecimal inicial.
- [Analizador APNG de bloques IDAT/fdAT, replay deflate y métodos de disposición con temporización de fotogramas](https://elysiatools.com/es/tools/apng-idat-fdat-chunk-streaming-deflate-replay-and-disposal-method-analyzer): Sube un PNG/APNG y analiza su estructura de animación: firma PNG y verificación CRC32 por bloque, IHDR (profundidad/tipo de color/entrelazado), acTL (número de fotogramas y reproducciones, debe preceder al primer IDAT), fcTL (número de secuencia, restricción de región x+y+w+h ≤ lienzo, normalización delay_num/delay_den, dispose_op none/background/previous, blend_op source/over), primer fotograma IDAT + fotogramas fdAT; los números de secuencia compartidos fcTL+fdAT deben crecer de 1 en 1 desde 0; se reproduce el flujo deflate de cada fotograma comprobando que el tamaño descomprimido = alto × (1 + bytes por fila) y se informa del zlib dañado; la simulación de disposal avisa de un previous en el primer fotograma (se trata como background), fotogramas con retardo cero, etc.
- [Estudio de gráficos CSV: histograma, dispersión y caja](https://elysiatools.com/es/tools/csv-histogram-scatter-box-plot-chart-studio): Sube o pega un CSV y gráficalo al instante: histogramas con reglas Sturges / Freedman-Diaconis / Scott, dispersión con r de Pearson y ajuste por mínimos cuadrados, y diagramas de caja de Tukey — cada gráfico descargable en PNG y SVG.
- [Esteganografía de imagen: incrustar y detectar](https://elysiatools.com/es/tools/image-steganography-embed-detect): Oculta texto en los bits menos significativos de un PNG, extráelo de vuelta y ejecuta el análisis esteganográfico chi-cuadrado de Westfeld–Pfitzmann con curva p y vista del plano LSB.
- [Puente de PDF (OCR) a JSON estructurado](https://elysiatools.com/es/tools/ocr-pdf-to-structured-json-bridge): Extrae la capa de texto del PDF con geometría (líneas por posición y, tablas por huecos de columna, títulos por tamaño de fuente, pares clave-valor con dos puntos) y rellena campo a campo un JSON Schema del usuario — etiquetas emparejadas por claves normalizadas, valores coaccionados a los tipos declarados y validados con ajv.

## Ejemplos

- [Muestras MP3 Sin Derechos de Autor](https://elysiatools.com/es/samples/mp3-samples): Colección de muestras de audio sin derechos de autor para pruebas y desarrollo, incluyendo sonidos de la naturaleza, música de meditación y audio ambiental
- [Ejemplos de Comentarios de Código](https://elysiatools.com/es/samples/code-comment-samples): Archivos de muestra de código con varios estilos de comentarios para probar la eliminación de comentarios
- [Ejemplos de Códigos QR](https://elysiatools.com/es/samples/qrcode-samples): Imágenes de códigos QR de muestra para probar herramientas de lectura y generación de códigos QR
- [GitHub Actions Testing - Integración CI/CD](https://elysiatools.com/es/samples/github-actions-testing): Flujos de trabajo completos de prueba de GitHub Actions incluyendo pruebas automatizadas, ejecución paralela, reportes de pruebas, caching y patrones CI/CD avanzados para pipelines de desarrollo modernos
