I have a Django custom command that can return non-zero exit codes. I'd like to test this command, but the call to sys.exit(1)
exits the test runner.
Is there a "proper" way to assign the exit code in a custom Django command?
My code currently looks like this:
# Exit with the appropriate return code
if len(result.failures) > 0 or len(result.errors) > 0:
sys.exit(1)
I chose to mock the call to sys.exit()
in the tests to prevent it to exit the test runner:
from mock import patch
with patch('sys.exit') as exit_mocked:
call_command(...)
exit_mocked.assert_called_with(1)
A solution that worked for me was the one taken from https://stackoverflow.com/a/8332117/6490637. My unit test ended like this:
with self.assertRaises(SystemExit) as sys_exit:
# call your code here
pass
# Assuming I'm expecting 101 as the exit code
self.assertEquals(sys_exit.exception.code, 101)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With