使用Django 1.3,Python 2.6中預設語言測試
有一個特別奇怪的問題追查相關 國際化過程中不尊重,RequestFactory與TestClient的測試 意見。
如果我運行:
./manage.py test
運行所有測試(包括有問題的那些),並順利通過。如果我運行:
./manage.py test <appname>
應用程序的測試將失敗,拋出一個模板渲染例外的是使用語言代碼,因爲語言的Django 認爲該請求是要求 模板是不是我們所列出語言 settings.LANGUAGES。 (在這種情況下,它一直是「EN-US」,我們支持衣櫃匹配的語言是「恩」)
這是一個測試的例子將失敗:
class TemplateServingTestCase(TestCase):
def setUp(self):
self.app_dir = os.path.abspath(os.path.dirname(__file__))
self.gallery_root = os.path.join(self.app_dir, 'test_gallery')
self.gallery_url = '/'
self.request = RequestFactory().get('/')
def test_404_invalid_category(self):
self.assertRaises(Http404, gallery_page,
self.request,
'bad-category',
self.gallery_root,
self.gallery_url
)
這個問題不會如果使用django的TestClient向調用特定視圖的網址發出 請求,則會發生。但是,如果只是使用RequestFactory的get或put方法調用相同的 視圖,它將拋出上述錯誤。
看起來好像在使用RequestFactory方法時, 設置文件沒有得到遵守。我在這裏錯過了一些簡單的 ?
其他信息
適用區域設置
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', 'English'),
('de', 'Deutsch'),
('es', 'Espanol'),
('fr', 'Francaise'),
('it', 'Italiano'),
('pt-br', 'Portugues (Brasil)'),
)
主動中間件
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'services.middleware.LegacyIntegrationMiddleware',
)
見上文編輯,a)按預期在這種情況下是行不通的。 b)是否解決了這個問題,但仍然很好奇爲什麼RequestFactory不尊重設置文件。 – kaptainlange 2012-03-23 17:29:24
經過測試a),適用於我的Python和Django相同版本。謹防中間件訂購。 – Stan 2012-03-23 18:09:04
您的'LANGUAGE_CODE'設置看起來無效。 https://docs.djangoproject.com/en/1.3/ref/settings/#language-code – Stan 2012-03-23 18:48:19