Because BaseCommand catches all CommandError exceptions and turns them into nicely formatted strings before calling sys.exit(1), it can be tricky to properly test failure.
Normally, this is great, but it makes testing that a command fails when we expect to a little harder. That's where this snippet comes in. It redirects sys.stderr to an instance StringIO where we can monitor what's output and catches the BaseException raised by sys.exit(1). Form here, it's trivial to test that a management command fails exactly as you'd expect it to.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import cStrinIO
import sys
from django.test import TestCase
class MyCommandTestCase(TestCase):
def test_mycommand_failure(self):
old_stderr = sys.stderr
sys.stderr = cStringIO.StringIO()
self.assertRaises(BaseException, management.call_command, 'mycommand')
self.assertTrue('Error: Some error condition here' in sys.stderr.getvalue())
sys.stderr = old_stderr
|
More like this
- find even number by Rajeev529 2 weeks, 2 days ago
- Form field with fixed value by roam 1 month, 1 week ago
- New Snippet! by Antoliny0919 1 month, 2 weeks ago
- Add Toggle Switch Widget to Django Forms by OgliariNatan 4 months ago
- get_object_or_none by azwdevops 7 months, 3 weeks ago
Comments
Please login first before commenting.