¿Puede alguien explicarme cómo probar correctamente los errores de Postgres DB, particularmente IntegrityError? Por ejemplo, he siguiente prueba: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)
Aquí llama la IntegrityError pero entonces todas las operaciones se producirá un error, porque así es como postgres obras, bien. Veo en los documentos que puedo usar transaction.rollback() pero donde: en la prueba o en el método save()?
Además, no me gusta la idea de escribir retrocesos a mano, ¿por qué no puede django solo tratar de guardar, y si falla? Dame IntegrityError y déjame continuar trabajando.
estoy usando Django 1.1
Ok, gracias. Entonces, en el código de Live, todo estará bien después de capturar IntegrityError? ¿O debería todavía revertir allí explícitamente? –
Debe evitar causar siempre IntegrityError en su propio código y tratar cualquier error de SQL como un error. Por lo tanto, debe verificar antes de intentar alguna modificación si esa modificación será sensata. Si encuentra que la modificación no se puede realizar, puede deshacer e informar el problema al usuario. O puede decidir omitir la modificación, o hacer una modificación diferente en su lugar. –