Utilizzando Django 1.3, Python 2.6predefinito tramite le impostazioni non rispettata durante i test
Avere un problema particolarmente strano per rintracciare correlate a internazionalizzazione e RequestFactory contro TestClient per testare vista.
se corro:
./manage.py test
tutte le prove vengono (compresi quelli problematici) e superare con successo. Se corro:
./manage.py test <appname>
test del app fallirà, lanciando un modello di rendering un'eccezione per modelli che utilizzano il codice della lingua, perché il Django lingua pensa la richiesta sta chiedendo non è un linguaggio abbiamo elencato in settings.LANGUAGES. (In questo caso è sempre stato 'it-it', il linguaggio armadio corrispondente sosteniamo di essere 'it')
Ecco un esempio di un test che non riuscirà:
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
)
Questo problema non sarà si verificano se il TestClient di django viene utilizzato per fare una richiesta a un URL che chiama una vista particolare. Tuttavia, se la stessa vista viene semplicemente chiamata con il risultato di RequestFactory ottieni o metti i metodi , genererà l'errore sopra riportato.
Sembra che quando si utilizza il metodo RequestFactory, il file di impostazioni non venga rispettato. Mi manca qualcosa di semplice qui?
Informazioni aggiuntive
impostazioni internazionali applicabili
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', 'English'),
('de', 'Deutsch'),
('es', 'Espanol'),
('fr', 'Francaise'),
('it', 'Italiano'),
('pt-br', 'Portugues (Brasil)'),
)
middleware attivo
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'services.middleware.LegacyIntegrationMiddleware',
)
Vedere le modifiche sopra, a) non funziona come previsto in questo caso. b) Risolve il problema, ma è comunque molto curioso del perché RequestFactory non rispetti il file delle impostazioni. – kaptainlange
Testato a) e funziona per me con le stesse versioni di Python e Django. Attenzione alle ordinazioni dei middlewares. – Stan
L'impostazione 'LANGUAGE_CODE' non è valida. https://docs.djangoproject.com/en/1.3/ref/settings/#language-code – Stan