簡體   English   中英

Django Test正在使用manage.py測試應用程序,但沒有使用manage.py測試

[英]Django Test is working with manage.py test app but not with manage.py test

我寫了一個TestCase來檢查我需要一個Teacher-Object的視圖。

class ShowTeacherViewTest(TestCase):
@classmethod
def setUpTestData(cls):
    gender = Gender.objects.create(gender='Male')
    gender_id = gender.id
    Teacher.objects.create(
            gender_id=gender_id,
            first_name='Maria',
            last_name='Santana',)

def test_view_uses_correct_template(self):
    teacher = Teacher.objects.first().id
    response = self.client.get(reverse('get_student'), {'teacher': teacher})
    self.assertEqual(response.status_code, 200)

當我運行'manage.py test app'時,一切都很完美。

如果我正在運行'manage.py test',則此錯誤消失:

 self.model._meta.object_name
 students.gender.Gender.DoesNotExist: Gender matching query does not exist.

由於一些外鍵,我也在其他模型測試中使用這些教師對象。 那么,在每次測試之前重置test_db是可能的還是必要的?

這是完整的Traceback:

Traceback (most recent call last):
  File "/Users/user/django/venv/teaching/tests/test_get_students.py", line 157, in test_view_uses_correct_template
    response = self.client.get(reverse('get_student'), {'student': student})
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/test/client.py", line 527, in get
    response = super().get(path, data=data, secure=secure, **extra)
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/test/client.py", line 339, in get
    **extra,
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/test/client.py", line 414, in generic
    return self.request(**r)
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/test/client.py", line 495, in request
    raise exc_value
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/user/django/venv/teaching/get_students.py", line 55, in get_student
    image = get_alibi_pic(image, gender, student)
  File "/Users/user/django/venv/teaching/get_students.py", line 27, in get_alibi_pic
    gender_male = Gender.objects.get(pk=1)
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/user/anaconda3/envs/venv/lib/python3.7/site-packages/django/db/models/query.py", line 399, in get
    self.model._meta.object_name
students.gender.Gender.DoesNotExist: Gender matching query does not exist.

回溯顯示此行失敗:

gender_male = Gender.objects.get(pk=1)

您通常不應該在代碼或測試中使用硬核主鍵。 使用manage.py test運行所有manage.py test ,使用不同的主鍵創建對象,因此get(pk=1)失敗。

如果您確實需要在代碼中對pk進行硬編碼,那么您需要在測試類中使用正確的pk創建對象:

gender = Gender.objects.create(pk=1, gender='Male')

但是,更好的解決方法是更改​​代碼,以便它不使用硬編碼的pk。

gender_male = Gender.objects.get(gender='Male')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM