Kısa bir süre önce Django 1.8.4 sürümüne yükselttiğim bir Django uygulamasına sahibim. Test koşum için 200'den fazla entegrasyon ve birim testi yapmak için burun 1.3.7 ve django-burun 1.4.1 kullanıyorum. Django ve burun hem geçişten bu yana, benim testlerin 12 aynı hata ile başarısız buluyorum:Django 1.8 ve burun: çelişen modeller?
======================================================================
ERROR: Failure: RuntimeError (Conflicting 'c' models in application 'nose': <class 'account.tests.form_tests.TestAddress'> and <class 'nose.util.C'>.)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/me/venv/myproj/lib/python2.7/site-packages/nose/loader.py", line 523, in makeTest
return self._makeTest(obj, parent)
File "/Users/me/venv/myproj/lib/python2.7/site-packages/nose/loader.py", line 568, in _makeTest
obj = transplant_class(obj, parent.__name__)
File "/Users/me/venv/myproj/lib/python2.7/site-packages/nose/util.py", line 644, in transplant_class
class C(cls):
File "/Users/me/venv/myproj/lib/python2.7/site-packages/django/db/models/base.py", line 311, in __new__
new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
File "/Users/me/venv/myproj/lib/python2.7/site-packages/django/apps/registry.py", line 223, in register_model
(model_name, app_label, app_models[model_name], model))
RuntimeError: Conflicting 'c' models in application 'nose': <class 'account.tests.form_tests.TestAddress'> and <class 'nose.util.C'>.
Ne meraklı form_tests.py modülü bile aslında içinde bir sınıftır TestAddress başvuru olmamasıdır benim "profiller" modeli:
# myprof/profile/models.py
class TestAddress(models.Model):
user = models.OneToOneField(User, primary_key=True, unique=True)
address_line_1 = models.CharField(max_length=30)
address_line_2 = models.CharField(max_length=30, null=True, blank=True)
city = models.CharField(max_length=30)
region = models.CharField(max_length=30, null=True, blank=True)
postal_code = models.CharField(max_length=10, null=True, blank=True)
country = models.ForeignKey('Country')
class Meta:
db_table = 'test_address'
def __unicode__(self):
return u'%s' % (self.user.username)
benim testler TestAddress sınıfının bir örneğini oluşturmak gerekiyor, ben bir factory_boy kullanmak (v 2.5.2.) fabrika: Ben breakpointler
# utils/factories.py
from profile.models import TestAddress
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
username = 'testuser'
class TestAddressFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestAddress
user = factory.SubFactory('utils.factories.UserFactory')
address_line_1 = '123 Main St.'
address_line_2 = 'Apt. A'
city = 'AnyCity'
region = 'AnyRegion'
postal_code = '12345'
country = factory.SubFactory('utils.factories.CountryFactory')
burun loader.py modülünde ve yükleyicinin "profile.models" içinde "TestAddress" değerini gördüğünü doğruladı. Ancak, orada "account.tests.model_tests" olarak ayarlanmış bir "parent .__ name__" değişkeni var. Ben birkaç soru var:
1. Why is this occurring?
2. Is there a way I can fix it?
3. Is there some way I can get nose to tell me which tests are resulting in these runtime errors so that I can at least disable them if I can't fix the problem?
ben "--verbosity = 2" set ama bu başarısız testlerin isimlerini göstermez. Burun doktorlarına baktım ve hiçbir şey görmedim. En kötü durumda, her testi tek tek çağırmak için bir komut dosyası yazabilirim ve test adını çalmadan önce yankılanabilirim ama bu çok çirkin ve zaman alıcı görünüyor.
Teşekkürler.