authenticate () возвращает None для пользователя в системе при использовании self.client.post () - PullRequest
0 голосов
/ 15 февраля 2020

Так что я сейчас работаю над переделкой проекта, который я делал, когда я был новичком в Django. На этот раз я хотел бы убедиться, что я использую тесты для практики и лучше узнаю Django. Моя проблема в том, что у меня есть пользователь, который, как я знаю, находится в системе, так как я подключился к нему как и раньше, но когда я запускаю тест с использованием self.client.post (), он возвращает None. Я трижды проверил написание имени пользователя и пароля, а также скопировал и вставил рабочие строки в веселом тесте c и все еще ничего.

Вот этот тест

def test_login_authenticates_users(self):
        response = self.client.post('/', {'username' : 'TestUser', 'password' : 'password'})
        self.assertRedirects(response, '/')
        # IDK why this line fails
        self.assertNotEqual(None, authenticate(username='Test.User', password='Usetheforceluke'))
        response = self.client.post('/', {'username' : 'Test.User', 'password' : 'Usetheforceluke'})
        self.assertRedirects(response, '/home')

Здесь это функциональный тест, который работает:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import unittest

class NewTeacher(unittest.TestCase):

    def setUp(self):
        self.browser = webdriver.Firefox()

    def tearDown(self):
        self.browser.quit()

    def test_teacher_adds_a_new_class(self):
        # The MCSP Department has a webpage used for all of the assignments
        # A teacher decides to go to the MSCP homepage to manage their classes

        self.browser.get('http://localhost:8000')

        # The title mentions MCSP in the title
        self.assertIn('MCSP', self.browser.title)

        # They then log in using their username and password
        username_input = self.browser.find_element_by_id('username_input_box')
        password_input = self.browser.find_element_by_id('password_input_box')
        self.assertEqual(username_input.get_attribute('placeholder'),
                        'Username')
        self.assertEqual(password_input.get_attribute('placeholder'),
                        'Password')

        # It goes through here to the set failure later in the test
        username_input.send_keys('Test.User')
        password_input.send_keys('Usetheforceluke')
        password_input.send_keys(Keys.ENTER)
        time.sleep(1)


        # From there they see a navibar that shows "Home", "Grades", "Courses", and "Logout"
        self.assertIn('Home Page', self.browser.title)

        # They are currently on the home page which lets them see upcoming assignments and recent submissions
        self.fail('Finish the test')

        # Next they create a class by using the "Add Course" button on the navbar
        self.fail('Finish the test')

        # They also do so by uploading a spreadsheet
        self.fail('Finish the test')

        # The work done, they log out
        self.fail('Finish the test')

if __name__ == '__main__':

Я пытаюсь свести это к публикации соответствующего кода, я мог бы опубликовать представление и форму, которую я сделал, но насколько я знаю, это не должно не влияет на это. Я просмотрел другие вопросы перед публикацией и добавил

AUTHENTICATION_BACKENDS = (
        'django.contrib.auth.backends.ModelBackend',
    )

в файл settings.py без изменений. Если кому-то нужно больше кода, просто дайте мне знать, что!

РЕДАКТИРОВАТЬ: Итак, я сделал еще немного возни, напечатав всех пользователей в разных точках, и вспомнил, что Djangos TestCase НЕ использует базу данных, в которой находится система. Я забыл, что если вы хотите проверить аутентификацию, вам нужно будет создать пользователей в тесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...