Estoy trabajando en un proyecto de Django con cierta cantidad de código JavaScript de front-end. Estoy en el proceso de migrar el empaquetado y la minificación de JavaScript de djanog-pipeline a webpack con django-webpack-loader .
django-webpack-loader funciona ejecutando webpack por separado de cualquier proceso de Django para generar paquetes empaquetados. Django-webpack-loader luego leerá un archivo JSON escrito por webpack-bundle-tracker y usará la información para insertar las rutas correctas en las plantillas HTML.
Esto funciona sin problemas, pero hay un problema: algunas de nuestras pruebas unitarias accederán a la aplicación Django utilizando el cliente de prueba Django integrado, que genera respuestas HTML completas para que las pruebas puedan inspeccionar el resultado generado. La prueba se puede ejecutar sin que se haya realizado ninguna configuración relacionada con el paquete web. Por lo tanto, es posible que los paquetes empaquetados y el archivo JSON no existan. Estos no son necesarios para probar el código de interfaz, solo se inspecciona el HTML generado dinámicamente. Hacer que la prueba falle solo porque alguien olvidó ejecutar el paquete web genera frustración.
Idealmente, haría que django-webpack-loader solo use URL ficticias en las etiquetas <script> insertadas mientras ejecuta pruebas, eliminando la dependencia de los archivos generados por webpack. ¿Qué opciones tengo para resolver esta dependencia?
Y si desea hacerlo a un nivel superior para todas las pruebas realizadas por pytest , puede agregar a su conftest.py :
@fixture(autouse=True) def no_webpack_loaded(monkeypatch): def mockreturn(loader, bundle_name): return [] monkeypatch.setattr(WebpackLoader, "get_bundle", mockreturn)Puede parchear el cargador por completo para omitir cualquier cosa que django-webpack-loader pueda hacer:
from mock import patch ... @patch('webpack_loader.loader.WebpackLoader.get_bundle') def test(self, mock_wpl, client): mock_wpl.return_value = [] response = client.get("/") assert response.status_code == 200