Tengo una vista basada en clases en una aplicación de Django que se parece a esto:
class CBView(View): def get(self, request, client, *args, **kwargs): output1 = self.method1(argument1) output2 = self.method2(argument2) # Rest of the method implementation ... return response def method1(self, argument1): # Implementation ... return output1 def method2(self, argument2): # Implementation ... return output2 Y estoy tratando de escribir pruebas unitarias para los métodos de clase 'fáciles', a saber, method1 y method2 . Las pruebas se ven así:
class TestCBView(TestCase): def setUp(self): self.view = CBView() def test_method1(self): # Testing that output1 is as expected ... output1 = self.view.method1(argument1) ... self.assertEquals(output1, expected_output1) def test_method2(self): # Testing that output2 is as expected ... output2 = self.view.method2(argument2) ... self.assertEquals(output2, expected_output2)Después de eso, ejecuto:
coverage run ./manage.py test django_app.tests.test_cbviewQue ejecuta todas las pruebas con éxito, luego trato de ejecutar:
coverage report -m django_app/views.pyY obtengo:
Name Stmts Miss Cover Missing ------------------------------------- No data to report.Estoy haciendo algo mal ?
Estoy usando Coverage.py, versión 4.0.3., Django 1.8.15 y Python 2.7.13.
Acabo de tener el mismo problema. Parecía que tenía algunos datos no migrados, así que después de ejecutar en la terminal
python manage.py makemigrations python manage.py migratey volví a intentarlo con
coverage html --include=django_app/views.py coverage run manage.py test django_app.testsya todo estaba bien.
Al ejecutar pruebas con coverage , genera el archivo .coverage que está en un formato privado y no está diseñado para leerse directamente. Este archivo contiene los informes sin procesar que se utilizarán para mostrarle el informe, ya sea en la consola o en formato html con coverage html . Entonces, normalmente, si se ejecutaron las pruebas, el archivo .coverage debe estar allí en el directorio desde el que lanzó el comando coverage run ./manage.py test django_app.tests.test_cbview y luego, al estar en ese directorio, puede presionar el coverage report ... y debería funcionar.