簡體   English   中英

Django 單元測試 - 客戶端登錄似乎不起作用

[英]Django Unit Testing - Client login does not seem to work

在進行我自己的單元測試時,我一直在參考https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing 中的教程。 我的單元測試代碼如下:

from django.core.urlresolvers import reverse
from django.test import Client, TestCase
from django.contrib.auth.models import User

from companies.models import Company

class ContactViewTest(TestCase):

    def setUp(self):
        self.client = Client(HTTP_HOST='localhost:8000')

        company = Company(name='Test')
        company.save()

        user = User.objects.create(username='test_user1', email='test_user1@test.com')
        user.set_password('password')
        user.save()

        self.user = user
        self.company = company

    def test_logged_in_all_contacts_correct_template(self):
        c = self.client
        user_login = c.login(username=self.user.username, password=self.user.password)
        self.assertTrue(user_login)

        resp = c.get(reverse('all-contacts'), follow=True)

        # Check if user is logged in
        self.assertEquals(str(resp.context['user']), 'test_user1')
        # Check if response is "success"
        self.assertEqual(resp.status_code, 200)

        self.assertTemplateUsed(resp, 'all_contacts.html')

在運行 python manage.py test contacts.tests 時,我遇到了一些錯誤。

第一個是self.assertTrue(user_login)返回AssertionError: False is not true

第二個是self.assertEquals(str(resp.context['user']), 'test_user1')當我刪除self.assertTrue(user_login)時返回AssertionError: 'AnonymousUser' != 'test_user1'

除了 client.login() 沒有按我預期的那樣工作之外,我不太確定出了什么問題,所以提前感謝任何可以提供幫助的人。

問題是self.user.password散列密碼。

你可以這樣做,

user_login = c.login(username=self.user.username, password='password')

或者您可以改用force_login ,它不需要密碼。

c.force_login(self.user)

以下任何情況都是可能的:

確保您使用的是正確的 DJANGO_SETTINGS_MODULE。

以下應用程序應列在INSTALLED_APPS

INSTALLED_APPS = (
    ...,
    'django.contrib.auth',
    'django.contrib.sessions'
    ..,
    )

MIDDLEWARE應列出以下中間件:

MIDDLEWARE = (
    ...,
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    ...,
    )

如果您已將django.contrib.auth.models.User與自定義用戶my_app.User交換,則測試要求您在INSTALLED_APPSAUTH_USER_MODEL列出my_app ,即

INSTALLED_APPS = (
...,
    'my_app',
..,
)
AUTH_USER_MODEL = 'my_app.User'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM