Так что я сейчас работаю над переделкой проекта, который я делал, когда я был новичком в 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 НЕ использует базу данных, в которой находится система. Я забыл, что если вы хотите проверить аутентификацию, вам нужно будет создать пользователей в тесте.