当我尝试运行测试时,标题出现错误,我不知道发生了什么,但是我的testUser无法正常工作,这很有趣,因为我在另一个项目中拥有相同的测试用户,并且一切正常。
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)
这是另一个项目的测试,一切正常
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}')
答案 0 :(得分:4)
setUpTestData
在整个测试类中仅被调用一次,但更重要的是在之前 setUp
被调用。
您的工作代码在setUpTestData
中没有任何内容依赖于setUp
中的数据,这是正确的。但是您的无效代码确实;它尝试访问尚未创建的用户。您需要进行重构,以便在setUpTestData
内部创建用户,或者在setUp
内部创建任务。
答案 1 :(得分:1)
您的测试用户的ID可能不是1,而不是使用ID,您可以在setUpTestData
方法中使用用户名:
user = User.objects.get(username='test')
答案 2 :(得分:0)
TL; DR:就我而言,我忘记创建和应用迁移了
python manage.py makemigrations
python manage.py migrate
更长一点,我已经修改了Django模型,但是没有将更改推送/迁移到数据库中,该数据库实际上保存了有关那些模型的数据。因此,当我的代码要求提供模型数据时,它们不在数据库中,因此不在matching query does not exist
中。
OP的问题不是这种情况,尽管我的答案可能是标题中提到的错误的一种解决方案,而错误却使我排在首位。