ぷろぐら×でざいん

Django Rest frameworkでTokenテスト

Django Rest frameworkでTokenテスト

Django Rest frameworkでTokenテスト

ヘッダーTokenテスト

リクエストヘッダーに

{Authorization: 'Token トークンが入る'}

を付けてリクエストするテストをしたく色々調べてみた。
結果的には下記のようなソースコードになりました。

self.client.get(url, HTTP_AUTHORIZATION=self.token)

HTTP_AUTHORIZATIONを実際にリクエストを行う部分に入れるのがポイントでした。


ソースコード

factories.py

# -*- coding: utf-8 -*-
import factory
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token


class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User


class TokenFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Token

    user = factory.SubFactory(UserFactory, user=UserFactory)


test.py

# -*- coding: utf-8 -*-
from django.urls import reverse
from rest_framework.test import APIClient, APITestCase

from .factories import TokenFactory, UserFactory


class CommonTests(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.client = APIClient()
        token = TokenFactory(user=UserFactory(is_active=True))
        cls.token = 'Token ' + token.key

    def test_get_sample(self):
        url = reverse('v1:sample')
        res = self.client.get(url, HTTP_AUTHORIZATION=self.token)
        self.assertEquals(res.status_code, 200)


あとがき

Django rest frameworkは他にも色々なテスト手法が揃っているので、ドキュメントを確認してみると良いかも知れません。ユーザー情報でログインをし、一時的なトークンを発行する方が主流な中、事前発行したトークンだけで承認を行うテストは逆に少なく、やり方を調べるのに苦労しました。少しでも参考になれば幸いです。


参照

http://www.django-rest-framework.org/api-guide/testing/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です