Quelqu'un peut-il m'expliquer comment tester correctement les erreurs Postgres DB, en particulier IntegrityError. Par exemple, j'ai test suivant:django Postgres IntegrityError
class TestSlugs(TestCase):
# This slug must be unique
b = BookPublisher(slug=self.duplicate_slug)
self.assertRaises(IntegrityError, b.save)
#check if there's only one BookPublisher
self.assertEquals(BookPublisher.objects.count(), 1)
Ici, il attrape le IntegrityError mais toutes les opérations échouera, parce que comment fonctionne Postgres, ok. Je vois dans les docs que je peux utiliser transaction.rollback() mais où: dans test ou dans la méthode save()?
Aussi, je n'aime pas l'idée d'écrire des rollbacks à la main, pourquoi django ne peut pas simplement essayer d'enregistrer, et si elle échoue - donnez-moi IntegrityError et laissez-moi continuer à travailler.
J'utilise django 1.1
Ok merci. Donc, dans le code en direct, tout ira bien après avoir attrapé IntegrityError? Ou devrais-je toujours revenir en arrière explicitement? –
Vous devriez éviter de provoquer IntegrityError dans votre propre code, et traiter toute erreur SQL comme un bug. Donc, vous devriez vérifier avant d'essayer une modification si cette modification sera sensible. Si vous constatez que la modification ne peut pas être effectuée, vous pouvez revenir en arrière et signaler le problème à l'utilisateur. Ou vous pouvez décider d'ignorer la modification ou de faire une modification différente à la place. –