Django: RROR: test_refresh (user_control.tests.TestAuth)

from rest_framework.test import APITestCase
from .views import get_random, get_access_token, get_refresh_token

class TestGenericFunctions(APITestCase):

    def test_get_random(self):

        rand1 = get_random(10)
        rand2 = get_random(10)
        rand3 = get_random(15)

        # check that we are getting a result
        self.assertTrue(rand1)

        # check that rand1 is not equel to rand2
        self.assertNotEqual(rand1, rand2)

        #check that the length of result is what is expected 
        self.assertEqual(len(rand1), 10)
        self.assertEqual(len(rand3), 15)

    def test_get_access_token(self):
        payload = {
            "id": 1
        }

        token = get_access_token(payload)

        # check that we obtained a result

        self.assertTrue(token)

    def test_get_refresh_token(self):
        
        token = get_refresh_token()

        # check that we obtained a result

        self.assertTrue(token)

class TestAuth(APITestCase):
    login_url = "/user/login"
    register_url = "/user/register"
    refresh_url = "/user/refresh"

    def test_register(self):
        payload = {
            "username": "admin",
            "password": "1234567890"
        }

        response = self.client.post(self.register_url, data = payload)

        #check that we obtain a status of 201
        self.assertEqual(response.status_code, 201)

    def test_login(self):
        payload = {
            "username": "admin",
            "password": "1234567890"
        }

        # register
        self.client.post(self.register_url, data=payload)

        # login
        response = self.client.post(self.login_url, data = payload)
        result = response.json()

        # check that we obtain a status of 200
        self.assertEqual(response.status_code, 200) 

        # check that we obtained both the refresh and access token
        self.assertTrue(result["access"])
        self.assertTrue(result["refresh"])

    def test_refresh(self):
        payload = {
            "username": "admin",
            "password": "1234567890"
        }

        # register
        self.client.post(self.register_url, data=payload)

        # login
        response = self.client.post(self.login_url, data = payload)
        refresh = response.json()["refresh"]

        #get refresh
        response = self.client.post(
            self.refresh_url, data={"refresh": refresh})
        result = response.json()

        # check that we obtain a status of 200
        self.assertEqual(response.status_code, 200) 

        # check that we obtained both the refresh and access token
        self.assertTrue(result["access"])
        self.assertTrue(result["refresh"])


Текст ошибки: ERROR: test_login (user_control.tests.TestAuth) line 67, in test_login response = self.client.post(self.login_url, data = payload)

ERROR: test_refresh (user_control.tests.TestAuth) ine 87, in test_refresh response = self.client.post(self.login_url, data = payload)


Ответы (1 шт):

Автор решения: Andy Pavlov

У Вас есть переменные класса TestAuth

login_url = "/user/login"
register_url = "/user/register"
refresh_url = "/user/refresh"

которые Вы потом через self пытаетесь вызвать. Можно их перенести в

class TestAuth(APITestCase):
    def setUp(self):
        self.login_url = "/user/login"
        self.register_url = "/user/register"
        self.refresh_url = "/user/refresh"
→ Ссылка