首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在具有permission_classes = (IsAuthenticated,)的Django REST API端点上编写单元测试

如何在具有permission_classes = (IsAuthenticated,)的Django REST API端点上编写单元测试
EN

Stack Overflow用户
提问于 2021-09-10 09:25:26
回答 1查看 566关注 0票数 0

大家好,我希望在我的django应用程序上编写单元测试,以便测试不同的API端点,但我似乎无法理解我们的问题,这里是我到目前为止所做工作的一个快速代码:

urls.py:

代码语言:javascript
运行
AI代码解释
复制
path('translate/display/', DisplayTranslation.as_view(), name='display_translation'),

对应的DRF view.py:

代码语言:javascript
运行
AI代码解释
复制
class DisplayTranslation(generics.ListAPIView):
    queryset = Translation.objects.all()
    serializer_class = TranslationSerializers
    permission_classes = (IsAuthenticated,)

这是我到目前为止在我的单元test.py上所做的:

代码语言:javascript
运行
AI代码解释
复制
apiclient = APIClient()

class TranslationTestCases(APITestCase):
    def setUp(self):
        self.role = baker.make(Roles)
        self.user = baker.make(Users, user_role=self.role)
        self.token = reverse('token_obtain_pair', kwargs={'email': self.user.email, 'password': self.user.password})
        self.translation = baker.make(Translation, _quantity=10)
    
    def test_get_all_translations(self):
        header = {'HTTP_AUTHORIZATION': 'Token {}'.format(self.token)} 
        response = self.client.get(reverse('display_translation'), {}, **header)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 10)

这是我在运行测试时得到的错误:in _reverse_with_prefix raise NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch: Reverse for 'token_obtain_pair' with keyword arguments '{'email': 'dZbQNWCjif@example.com', 'password': 'PfQzPqqVVLAdLZtJyVUxVjkGJEgRABYdHxMRhCGZJWxnZxpxEgUkgUKklENrWlBiYOCxhaDtJXdtXCtNdOJYtSWTzIrdvPnrmezXBNjEYYTpyZWjOLMnMIBMAfYnLwcC'}' not found. 1 pattern(s) tried: ['token/$']

更多信息,在我的Django应用程序的身份验证中,我使用了DRF、rest_auth和SimpleJWT库。

我能做些什么来改进我的代码?或者是另一种解决方案?我找不到和我类似的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-10 09:41:41

你基本上可以使用

代码语言:javascript
运行
AI代码解释
复制
@patch.object(DisplayTranslation, "permission_classes", [])
def test_get_all_translations(self):
    ...

https://docs.python.org/3/library/unittest.mock.html#patch-object

使用身份验证:

代码语言:javascript
运行
AI代码解释
复制
urlpatterns = [
    ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    ...
]

class TranslationTestCases(APITestCase):
    def setUp(self):
        self.api_client = APIClient()
        self.role = baker.make(Roles)
        self.user = baker.make(Users, user_role=self.role)
        self.token_url = reverse('token_obtain_pair')
        self.translation = baker.make(Translation, _quantity=10)
        response = self.api_client.post(self.token_url, {"username": self.user.username, "password": self.user.password})
        self.token = response.json()["access"]
    
    def test_get_all_translations(self):
        header = {'HTTP_AUTHORIZATION': 'Bearer {}'.format(self.token)} 
        ...

https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69135887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档