django.contrib.auth.models.User.DoesNotExist:用户匹配查询不存在

Kur*_*cha 1 python testing django

当我尝试运行测试时,我在标题中出现错误,我不知道发生了什么,但我的 testUser 无法正常工作,这很有趣,因为我在另一个项目中有相同的测试用户,并且一切正常。

test_api.py

class TaskDetailViewAPI(APITestCase):
    def setUp(self):
       self.client = APIClient()
       self.user = User.objects.create_user(username='test', password='test123')
       self.user.save()

   @classmethod
   def setUpTestData(cls):
       user = User.objects.get(id=1)
       Task.objects.create(name='TestTask', user=user, status='NEW', date=date(2019, 4, 9), description='This is test')

    def test_access_to_view_logged(self):
       task= Task.objects.get(id=1)
       login = self.client.login(username='test', password='test123')
       self.assertTrue(login)
Run Code Online (Sandbox Code Playgroud)

这是来自另一个项目的测试,一切正常

class CreateCommentAPI(APITestCase):
   def setUp(self):
       self.client = APIClient()
       self.user = User.objects.create_user(username='test', password='test123')
       self.user.save()

   @classmethod
   def setUpTestData(cls):
       Category.objects.create(name='PC', slug='pc')
       Product.objects.create(
           category=Category.objects.get(id=1),
           name='Laptop', slug='laptop',
           description='here is description',
           photo=SimpleUploadedFile("file.jpeg", b"file_content", content_type="image/jpeg"),
           price=1999, available='available'
        )

   def test_access_to_view_logged(self):
       product = Product.objects.get(id=1)
       login = self.client.login(username='test', password='test123')
       response = self.client.get(reverse('add_comments', kwargs={'id': product.id}))
       self.assertTrue(login)
       self.assertEqual(response.status_code, 200, f'expected Response code 200, instead get {response.status_code}')
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

setUpTestData对整个测试类只调用一次,但更重要的是它是在 before 调用的setUp

您的工作代码内部没有任何setUpTestData依赖于数据的内容setUp,这是正确的。但是您的非工作代码确实如此;它尝试访问尚未创建的用户。您需要重构事物,以便 User 在内部创建setUpTestData,或者 Task 在内部创建setUp