22👍
Django does not run tests in a separate process; the linked answer claiming it does is simply wrong. (The closest is the LiveServerTestCase
for Selenium tests, which starts up a separate thread to run the development server, but this is still not a separate process, and it doesn’t prevent use of pdb). You should be able to insert import pdb; pdb.set_trace()
anywhere in a test (or in the tested code) and get a usable pdb prompt. I’ve never had trouble with this, and I just verified it again in a fresh project with Django 1.5.1 and django-discover-runner 1.0. If this isn’t working for you, it’s due to something else in your project, not due to Django or django-discover-runner.
Nose captures all output by default, which breaks import pdb; pdb.set_trace()
. The -s
option turns off output capturing. This is not necessary with the stock Django test runner or django-discover-runner, since neither of them do output-capturing to begin with.
I don’t know of any equivalent to nose’s --pdb
option if you’re using django-discover-runner. There is a django-pdb project that provides this, but a quick perusal of its code suggests to me that it wouldn’t play well with django-discover-runner; its code might give you some clues towards implementing this yourself, though.
FWIW, personally I use py.test with pytest-django rather than django-discover-runner or django-nose. And even though py.test provides a --pdb
option like nose, I don’t use it; I often want to break earlier than the actual point of error in order to step through execution prior to the error, so I usually just insert import pytest; pytest.set_trace()
(importing set_trace
from pytest
does the equivalent of nose’s -s
option; it turns off py.test’s output capturing before running pdb) where I want it in the code and then remove it when I’m done. I don’t find this onerous; YMMV.
13👍
Try to use ipdb instead of pdb –
import ipdb;ipdb.set_trace()
or (works in case of nose test runner)
from nose.tools import set_trace;set_trace()
- [Django]-How to add superuser in Django from fixture
- [Django]-How to get username from Django Rest Framework JWT token
- [Django]-How to delete project in django