4

Django REST Framework を使用して作成された REST API の機能テストを作成しようとしています。ただし、ほとんどが一般的な Django のものであるため、そのフレームワークに固有のものではありません。

これが私がやりたいことです

  1. setUpテストクラスのメソッドでユーザーを作成する
  2. テスト クライアントを使用して API からユーザー トークンをリクエストする

tests.py

from django.test import LiveServerTestCase

from django.contrib.auth.models import User
from django.test.client import Client
from rest_framework.authtoken.models import Token

class TokenAuthentication(LiveServerTestCase):
    def setUp(self):
        user = User.objects.create(username='foo', password='password', email="foo@example.com")
        user.save()
        self.c = Client()

    def test_get_auth_token(self):
        user = User.objects.get(username="foo")
        print user # this outputs foo
        print Token.objects.get(user_id = user.pk) # this outputs a normal looking token
        response = self.c.post("/api-token-auth/", {'username': 'foo', 'password': 'password'})
        print response.status_code # this outputs 400
        self.assertEqual(response.status_code, 200, "User couldn't log in")

テストを実行すると、ステータス 200 ではなく 400 が返されるため、ユーザーは認証されませんでした。データベースに既にあるユーザーの資格情報を入力すると、それは通過します。したがって、テストクラスで作成されたレコードは、それ自体のメソッド内でのみアクセスできると思います。これは、おそらく単体テスト用に設計されているためです。しかし、データベースのデータを使用してテストを実行すると、データが変更されると失敗します。

テストを実行する前にデータを作成する必要があるこのような機能テストは、Django でどのように実行する必要がありますか?

4

1 に答える 1

9

ユーザーを正しく作成していません。User.objects.createハッシュメカニズムではなくプレーンテキストでパスワードを設定します。代わりにUser.objects.create_user、ユーザー名とパスワードで認証できるように、パスワードを適切に設定する which を使用する必要があります。

于 2013-08-01T15:48:43.033 に答える