How to return a non-zero exit code on a custom Django command while being able to test it?

Tags: ,



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)

Answer

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)


Source: stackoverflow