El contexto de respuesta de prueba unitaria de Django es Ninguno

¿Por qué response.context None en las siguientes pruebas? He comprobado response.content y es ”. si elimino la línea assertIsNotNone obtengo un TypeError: el objeto ‘NoneType’ no se puede suscribir

def test_log_view_with_no_entries(self): """ If no logs are available, an appropriate message should be displayed. """ response = self.client.get(reverse('swpgr:logs')) self.assertIsNotNone(response.context) self.assertEqual(response.status_code, 200) self.assertContains(response, "No logs are available.") self.assertQuerysetEqual(response.context['log_list'], []) def test_log_view_with_one_entry(self): """ Logs should be displayed it table. """ time = timezone.now() t = LogEntry.objects.create(event_date=time, command_type="Test", command_source="Test Case", username="user") response = self.client.get(reverse('swpgr:logs')) self.assertIsNotNone(response.context) self.assertQuerysetEqual( response.context['log_list'], [''] )` 

Estaba teniendo este problema y para solucionarlo hice lo siguiente en la función de configuración:

 from django.test.utils import setup_test_environment setup_test_environment() 

Solución rápida

Hay otro dict de miembro de clase de contexto (derivado de SimpleTemplateResponse) que se llama context_data . Usar esto en lugar de solo contexto dará el dictado de contexto esperado (django 1.9). Pero tenga en cuenta que está definido como obsoleto desde django 1.8. A fin de utilizarlo en su propio riesgo. Desafortunadamente no he investigado una alternativa adecuada hasta ahora.

Fondo

La existencia del atributo de contexto de una respuesta parece depender del tipo de motor de plantilla (plantillas) que esté utilizando. Si elige otro motor que no sea el que viene con django (predeterminado) probablemente encuentre el dict en el atributo context_data

Referencias

  • Respuestas de prueba
  • context_data