“AdminSiteTests”对象没有属性“user”Django 单元测试

问题描述 投票:0回答:2

我似乎无法弄清楚为什么我的单元测试因以下原因而失败

Traceback (most recent call last):
  File "/app/core/tests/test_admin.py", line 26, in test_users_listed
    self.assertContains(res, self.user.name)
AttributeError: 'AdminSiteTests' object has no attribute 'user'

test_admin.py

from django.test import TestCase, Client
from django.contrib.auth import get_user_model
from django.urls import reverse


class AdminSiteTests(TestCase):

  def setup(self):
    self.client = Client()
    self.admin_user = get_user_model().objects.create_superuser(
      email='[email protected]',
      password='test123'
    )
    self.client.force_login(self.admin_user)
    self.user = get_user_model().objects.create_user(
      email='[email protected]',
      password='test123',
      name='test name'
    )

  def test_users_listed(self):
    """Test that users are listed on user page"""
    url = reverse('admin:core_user_changelist')
    res = self.client.get(url)

    self.assertContains(res, self.user.name)

self.assertContains(res, self.user.email)

admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from core import models


class UserAdmin(BaseUserAdmin):
  ordering = ['id']
  list_display = ['email', 'name']


admin.site.register(models.User, UserAdmin)

模型.py

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin



class UserManager(BaseUserManager):

  def create_user(self, email, password=None, **extra_fields):
    """Creates and saves a new user"""
    if not email:
      raise ValueError('Users must have a email address')
    user = self.model(email=self.normalize_email(email), **extra_fields)
    # Must encrypt password using set_password() that comes with BaseUserManager
    user.set_password(password)
    user.save(using=self._db)

    return user

  def create_superuser(self, email, password):
    """Creates and saves new superuser"""
    user = self.create_user(email, password)
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)

    return user


class User(AbstractBaseUser, PermissionsMixin):
  """Custom user model that supports using email instead of username"""
  email = models.EmailField(max_length=255, unique=True)
  name = models.CharField(max_length=255)
  is_active = models.BooleanField(default=True)
  is_staff = models.BooleanField(default=False)

  objects = UserManager()

  USERNAME_FIELD = 'email'

我正在设置函数中创建用户以进行其余的测试,但我想也许设置函数没有被调用来创建用户?

所有其他测试都通过。包括检查用户是否已创建的测试。任何帮助将不胜感激

python django unit-testing django-rest-framework
2个回答
0
投票

更详细地解释:

  1. Django 使用 python 的 unittest 模块并从那里导入 TestCase 类,可以在 here:
  2. 看到
  3. TestCase
    类具有我们在这里使用的setUp方法。

0
投票

test_admin.py
文件中,您错误地提到了
def setup(self):
。相反,它应该是
def setUp(self):
。这与 Django 测试和 Unittest 相比略有不同。

© www.soinside.com 2019 - 2024. All rights reserved.