2016-04-11 4 views
0

В настоящее время я пытаюсь создать тесты Django для макетного веб-сайта, который я создал.
Вот мой тест:Тест Django не согласен с тестовым пользователем

class ListingsTestCase(TestCase): 
    def test_listing(self): 
     user = User.objects.create_user(username='test') 
     user.set_password('test') 
     user.save() 

     c = Client() 
     c.login(username='test', password='test') 
     category = Category.objects.get_or_create(name='test') 

     t_listing = { 
        'title': 'Test', 
        'email': '[email protected]', 
        'phone_number': '4057081902', 
        'description': 'Test', 
        'category': category, 
        'user': user, 
        } 

     form = ListingForm(data=t_listing) 
     self.assertEqual(form.errors, {}) 
     self.assertEqual(form.is_valid(),True) 

Моя модель:

class Listing(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length = 200) 
    email = models.EmailField(max_length=50) 
    phone_number = models.CharField(max_length=12, default='') 
    listing_price = models.IntegerField(blank=True, null=True) 
    image = models.FileField(upload_to='listing_images') 
    description = models.TextField() 
    created_date = models.DateTimeField(auto_now=True) 
    category = models.ForeignKey('Category', null=True) 

    def __str__(self): 
     return self.title 

Вот мой ListingForm:

class ListingForm(forms.ModelForm): 
    image = forms.FileField(required=False) 
    class Meta: 
     model = Listing 
     fields = [ 
      'user', 
      'title', 
      'email', 
      'phone_number', 
      'description', 
      'listing_price', 
      'image', 
      'category', 
     ] 
     widgets = {'user': forms.HiddenInput()} 

А вот ошибка, что я получаю:

FAIL: test_listing (seller.tests.ListingsTestCase) 
Traceback (most recent call last): 
File "/home/local/CE/mwilcoxen/project/hermes/seller/tests.py", line 35, in test_listing 
self.assertEqual(form.errors, {}) 
AssertionError: {'category': [u'Select a valid choice. That choice is not one of the available choices.'], 'user': [u'Select a valid choice. That choice is not one of the available choices.']} != {} 

Итак, я использовал свои первые assertEquals, чтобы видеть, что бросает ошибки, и я использовал некоторые точки останова, чтобы знать, что мой тестовый пользователь может войти в систему, но по какой-то причине он просто не работает. Если бы кто-нибудь мог мне помочь, это было бы здорово.

+0

Что ваш 'ListingForm' код, пожалуйста? –

+0

Можете ли вы вставить листинг? –

+0

только что разместил его. –

ответ

1

Попробуйте использовать идентификаторы user и category вместо реальных объектов.

t_listing = { 
    'title': 'Test', 
    'email': '[email protected]', 
    'phone_number': '4057081902', 
    'description': 'Test', 
    'category': category.id, 
    'user': user.id, 

}

Обратите внимание, что get_or_create возвращает кортеж, так что вы должны изменить эту линию:

category, created = Category.objects.get_or_create(name='test') 
+0

Он показывает, что объект AttributeError: 'tuple' не имеет атрибута 'id'' –

+0

Duh, я должен был понять, что, когда он мне это сказал. Я так ценю это, это заставляло меня хотеть вытащить мои волосы –