J'essaye de créer un UnitTest pour vérifier qu'un objet a été supprimé.
from django.utils import unittest
def test_z_Kallie_can_delete_discussion_response(self):
...snip...
self._driver.get("http://localhost:8000/questions/3/want-a-discussion")
self.assertRaises(Answer.DoesNotExist, Answer.objects.get(body__exact = '<p>User can reply to discussion.</p>'))
J'obtiens toujours l'erreur:
DoesNotExist: Answer matching query does not exist.
django
unit-testing
exception
BryanWheelock
la source
la source
Réponses:
Vous n'avez pas besoin de l'importer - comme vous l'avez déjà écrit correctement,
DoesNotExist
c'est une propriété du modèle lui-même, dans ce casAnswer
.Votre problème est que vous appelez la
get
méthode - ce qui déclenche l'exception - avant qu'elle ne soit transmiseassertRaises
. Vous devez séparer les arguments de l'appelable, comme décrit dans la documentation unittest :ou mieux:
la source
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact = '<p>User can reply to discussion.</p>')
- c'est-à-dire avecget
les arguments de s ajoutés en tant qu'arguments kw individuels, pas à l'intérieur d'un()
.with
solution a fonctionné pour moi.Vous pouvez également importer
ObjectDoesNotExist
depuisdjango.core.exceptions
, si vous souhaitez une méthode générique indépendante du modèle pour intercepter l'exception:la source
DoesNotExist
est toujours une propriété du modèle qui n'existe pas. Dans ce cas, ce serait le casAnswer.DoesNotExist
.la source
Une chose à surveiller est que le deuxième paramètre
assertRaises
doit être un appelable - pas seulement une propriété. Par exemple, j'ai eu des difficultés avec cette déclaration:mais cela a bien fonctionné:
la source
la source
C'est ainsi que je fais un tel test.
la source