相关疑难解决方法(0)

在 Django 2 中模拟一个 RelatedManager

这个问题与这个问题直接相关,但那个现在似乎已经过时了。

我正在尝试测试视图而无需访问数据库。为此,我需要对RelatedManager用户进行模拟。

我正在使用pytestpytest-mock

模型.py

# truncated for brevity, taken from django-rest-knox
class AuthToken(models.Model):
    user = models.ForeignKey(
        User, 
        null=False, 
        blank=False,
        related_name='auth_token_set', 
        on_delete=models.CASCADE
    )
Run Code Online (Sandbox Code Playgroud)

视图.py

class ChangeEmail(APIView):
    permission_classes = [permissions.IsAdmin]
    serializer_class = serializers.ChangeEmail

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        user = request.user
        user.email = request.validated_data['email']
        user.save()

        # Logout user from all devices
        user.auth_token_set.all().delete() # <--- How do I mock this?

        return Response(status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

测试视图.py

def test_valid(mocker, user_factory):
    user = user_factory.build()
    user.id = …
Run Code Online (Sandbox Code Playgroud)

django pytest python-mock django-rest-framework pytest-django

3
推荐指数
1
解决办法
868
查看次数