Models that are imported into tests.py (and utilize signals) result in parallel tests that break test cases
|Reported by:||Dave Naffziger||Owned by:||nobody|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
In a sample models.py file:
def MyModel(models.Model): """ >>> u=User.objects.create_user('test2','te...@test.com') >>> u.email='new' >>> u.save() """ anyfield = models.BooleanField() COUNT = 0 def user_pre_save(sender, instance, signal, *args, **kwargs): global COUNT r = random.randint(1,50) print 'pre_save: count: %s random: %s' %(COUNT, r) COUNT +=1 dispatcher.connect(user_pre_save, signal=signals.pre_save, sender=User)
Then create a tests.py and add this import (that's all you need):
from myproject.models import MyModel
Here is what the test output looks like. Note that it looks like we're creating two duplicate threads each with their own state (COUNT doesn't increment between the runs of user_pre_save, but random is different.
pre_save: count: 0 random: 49 pre_save: count: 0 random: 23 ... Failed example: u=User.objects.create_user('test2','te...@test.com') Expected nothing Got: pre_save: count: 1 random: 13 pre_save: count: 1 random: 2 ... Failed example: u.save() Expected nothing Got: pre_save: count: 2 random: 18 pre_save: count: 2 random: 49
I've not been able to figure out what is causing this.