Я пытаюсь написать некоторые функциональные тесты для REST API, написанные с использованием Django REST Framework. Однако это не очень специфично для этой структуры, поскольку это в основном общий материал Django.Написание функциональных тестов для Django RESTful API
Это то, что я хочу сделать
- Создайте пользователя в
setUp
метод тестового класса - запроса пользователей маркер с API с помощью тестового клиента
тесты .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="[email protected]")
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")
Когда я запускаю тест, он возвращает статус 400, а не 200, поэтому пользователь не прошел аутентификацию. Если я введу учетные данные пользователя, который уже находится в базе данных, он проходит. Поэтому я полагаю, что записи, созданные в тестовом классе, доступны только в своих собственных методах, что, вероятно, связано с тем, что оно предназначено для модульного тестирования. Но я использую данные из базы данных для выполнения теста, который он сработает, если данные изменятся.
Как должен выполняться функциональный тест, например, когда данные должны быть созданы перед запуском теста, в Django?
Ну, это смущает, спасибо! –