微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试时,无法在<User:test>异常中的关键[user]查找失败

如何解决单元测试时,无法在<User:test>异常中的关键[user]查找失败

我有一个可以send/cancel/accept/delete个朋友请求的应用程序,我正在尝试对其进行测试,但是当我接受一个朋友请求并将用户添加到其他朋友列表时,我得到了一个Failed lookup for key [user] in <User: test>

在测试中,我创建了一个好友请求对象,并向视图发送一个接受get请求,该视图应将每个用户添加到其每个好友列表中,并删除friend_request。 / p>

调试显示错误发生在视图中的以下行:user1.friends.add(user2)上,因此实际上user2添加user1朋友列表中,但将user1添加到了{{ 1}}朋友列表引发了上面提到的异常。

models.py

user2

views.py

class User(AbstractBaseUser,PermissionsMixin):
    name = models.CharField('Full Name',max_length=35,unique=True,null=False,blank=False)
    friends = models.ManyToManyField("User",blank=True)

    def __str__(self):
        return self.name

class FriendRequest(models.Model)
    to_user = models.ForeignKey(User,related_name='to_user',on_delete=models.CASCADE)
    from_user = models.ForeignKey(User,related_name='from_user',on_delete=models.CASCADE)

在这里,我正在使用from django.db import transaction def accept_friend_request(request,pk): try: with transaction.atomic(): from_user = User.objects.get(pk=pk) f_request = FriendRequest.objects.filter( from_user=from_user,to_user=request.user ).first() user1 = f_request.to_user user2 = from_user user1.friends.add(user2) print(user1.friends.all()) user2.friends.add(user1) print(user2.friends.all()) f_request.delete() return redirect(request.get_full_path()) except Exception as ex: print(ex) return HttpResponse('User does not exist') 来防止异常破坏单元测试事务。

tests.py

transaction.atomic()

这是运行测试的结果:(您还可以看到第一个print语句的结果和正在打印的异常)

def setUp(self):
    self.client = Client()
    self.user = User.objects.create_user(email='test@gmail.com',name='test',password='test')
    self.user1 = User.objects.create_user(email='test1@gmail.com',name='test1',password='test1')
    self.client.force_login(self.user)

def test_accept_friend_request(self):
    friend_request = FriendRequest.objects.create(from_user=self.user1,to_user=self.user)
    self.client.get(reverse('accept_friend_request',kwargs={'pk': self.user1.pk}),follow=True)
    self.assertIn(self.user,self.user1.friends.all())
    self.assertIn(self.user1,self.user.friends.all())

更新

将Exception更改为IntegrityError会导致以下错误

Ran 1 test in 1.266s

Failed (failures=1)
Destroying test database for alias 'default'...
System check identified no issues (0 silenced).
<QuerySet [<User: test1>]>
Failed lookup for key [user] in <User: test>

看起来elasticsearch-dsl与这里的异常有关。

更新

调试异常消息更改为

raise VariableLookupError(django_elasticsearch_dsl.exceptions.VariableLookupError:
Failed lookup for key [user] in <User: test>

解决方法

所以我终于设法通过将重定向更改为request.META.get('HTTP_REFERER','/')使其正常运行,看起来重定向循环出现了问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。