2

問題: 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',
)

テストの失敗はすべて次のようになります。

======================================================================
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

この問題を Web で検索したため、何かが欠けている (または何か間違っている) に違いありませんが、誰もそれに遭遇したようには見えません。

再現する手順:

  1. 新しい django プロジェクト (django-admin.py startproject myproject) を開始し、settings.py を構成します。
  2. settings.py に CACHE_BACKEND を追加し、Django から 2 つのキャッシュ ミドルウェアを追加します。
  3. python manage.py テストを実行します

注: dummy:// キャッシュを使用した場合のテストの失敗は 1 つだけです

4

1 に答える 1

4

失敗したテストの解決策は、CACHE_MIDDLEWARE_SECONDS を 0 に設定することです (たとえば、開発環境ではこれを 0 に設定します)。これにより、django.contrib テストがすべてパスするようになります。

于 2010-07-14T07:52:52.743 に答える