30đź‘Ť
setUp
and tearDown
methods on Unittests are called before and after each test case. Define tearDown
method which deletes the created user.
class MyTesting(unittest.TestCase):
def setUp(self):
self.u1 = User.objects.create(username='user1')
self.up1 = UserProfile.objects.create(user=self.u1)
def testA(self):
...
def tearDown(self):
self.up1.delete()
self.u1.delete()
I would also advise to create user profiles using post_save
signal unless you really want to create user profile manually for each user.
Follow-up on delete comment:
From Django docs:
When Django deletes an object, it
emulates the behavior of the SQL
constraint ON DELETE CASCADE — in
other words, any objects which had
foreign keys pointing at the object to
be deleted will be deleted along with
it.
In your case, user profile is pointing to user so you should delete the user first to delete the profile at the same time.
10đź‘Ť
If you want django to automatically flush the test database after each test is run then you should extend django.test.TestCase
, NOT django.utils.unittest.TestCase
(as you are doing currently).
It’s good practice to dump the database after each test so you can be extra-sure you’re tests are consistent, but note that your tests will run slower with this additional overhead.
See the WARNING section in the “Writing Tests” Django Docs.
- [Django]-How do I access the child classes of an object in django without knowing the name of the child class?
- [Django]-How do I stop getting ImportError: Could not import settings 'mofin.settings' when using django with wsgi?
- [Django]-PyCharm: Forcing Django Template Syntax Highligting
3đź‘Ť
Precisely, setUp
exists for the very purpose of running once before each test case.
The converse method, the one that runs once after each test case, is named tearDown
: that’s where you delete self.u1
etc (presumably by just calling self.u1.delete()
, unless you have supplementary specialized clean-up requirements in addition to just deleting the object).
- [Django]-Use get_queryset() method or set queryset variable?
- [Django]-Postgresql: FATAL: password authentication failed for user "douglas"
- [Django]-Admin Site: TemplateDoesNotExist at /admin/