【问题标题】:Using Django Cache Middleware causes contrib.auth unit tests to fail使用 Django 缓存中间件会导致 contrib.auth 单元测试失败
【发布时间】:2010-07-10 14:59:13
【问题描述】:

问题:当我将 UpdateCacheMiddleware 和 FetchFromCacheMiddleware 添加到我的 Django 项目时,我遇到了单元测试失败。这与我使用的 CACHE_BACKEND 无关(现在我使用的是 locmem://,但是当我使用 file:///path_to_cache 时错误是一样的)

我的中间件:

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

我所有的测试失败都如下所示:“NoneType”对象不可订阅

======================================================================
Error: test_last_login (django.contrib.auth.tests.remote_user.RemoteUserTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Python26\lib\site-packages\django\contrib\auth\tests\remote_user.py",
 line 87, in test_last_login
    self.assertNotEqual(default_login, response.context['user'].last_login)
TypeError: 'NoneType' object is unsubscriptable

我在网上搜索了这个问题,但似乎没有人遇到它。

复制步骤:

  1. 启动一个新的django项目(django-admin.py startproject myproject)并配置settings.py
  2. 将 CACHE_BACKEND 添加到 settings.py 并添加来自 Django 的两个缓存中间件
  3. 运行 python manage.py 测试

注意:使用 dummy:// 缓存时只有一次测试失败,记录在:http://code.djangoproject.com/ticket/11640

【问题讨论】:

    标签: django unit-testing django-contrib


    【解决方案1】:

    测试失败的解决方案是将 CACHE_MIDDLEWARE_SECONDS 设置为 0(例如,在您的开发环境中将其设置为 0)。这将允许 django.contrib 测试全部通过。

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      相关资源
      最近更新 更多