如何绕过语言请求
How can I bypass the Language request
在我的每个视图中,我都有一个函数,即return 请求浏览器的语言代码。但是当我 运行 我的单元测试我的观点时我有一个错误:
applications\emplois\views.py:74:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <applications.emplois.views.IndexView object at 0x0000000006270048>
def language(self):
"""Return the user default language"""
> language = language_set(self.request.LANGUAGE_CODE)
E AttributeError: 'WSGIRequest' object has no attribute 'LANGUAGE_CODE'
applications\emplois\views.py:64: AttributeError
---------------------------- Captured stdout setup ----------------------------
Creating test database for alias 'default'...
=================== 1 failed, 11 deselected in 5.97 seconds ===================
views.py
def language_set(language):
if "-" in language:
return (language.split('-')[1]).upper()
else:
return language.upper()
class IndexView(generic.ListView):
"""
this is the ROOT page
return a list of Jobs
"""
template_name='emplois/index.html'
context_object_name='latest_jobs_list'
paginate_by = 10
def language(self):
"""Return the user default language"""
language = language_set(self.request.LANGUAGE_CODE)
language = language.upper()
return language
def get_queryset(self):
"""
Return a list of Jobs that have an EXPIRATION DATE
greater than Now() and a default Language
"""
#import ipdb;ipdb.set_trace()
return Job.objects.filter(language=self.language(),\
EXPIRYDATE__gt=datetime.now())\
.order_by('EXPIRYDATE')
测试:
import pytest
from django.core import mail
from django.contrib.auth.models import AnonymousUser
from django.http import Http404
from django.test import RequestFactory
from mock import patch
from mixer.backend.django import mixer
pytestmark = pytest.mark.django_db
from applications.emplois import views
class TestIndexView:
def test_anonymous(self):
req = RequestFactory().get('/')
resp = views.IndexView.as_view()(req)
assert resp.status_code == 200, 'Should be callable by anyone'
我不使用浏览器,如何绕过语言请求
当您使用 RequestFactory
时,您可以为请求提供任何请求参数。在这种情况下,您正在寻找 request.LANGUAGE_CODE
,因此解决方案是在测试的 RequestFactory
中设置 LANGUAGE_CODE
。
您可以查看 RequestFactory
here 的文档。
所以解决方案是:
def test_anonymous(self):
req = RequestFactory().get('/')
# Here is the change.
req.LANGUAGE_CODE = "en"
resp = views.IndexView.as_view()(req)
assert resp.status_code == 200, 'Should be callable by anyone'
在我的每个视图中,我都有一个函数,即return 请求浏览器的语言代码。但是当我 运行 我的单元测试我的观点时我有一个错误:
applications\emplois\views.py:74:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <applications.emplois.views.IndexView object at 0x0000000006270048>
def language(self):
"""Return the user default language"""
> language = language_set(self.request.LANGUAGE_CODE)
E AttributeError: 'WSGIRequest' object has no attribute 'LANGUAGE_CODE'
applications\emplois\views.py:64: AttributeError
---------------------------- Captured stdout setup ----------------------------
Creating test database for alias 'default'...
=================== 1 failed, 11 deselected in 5.97 seconds ===================
views.py
def language_set(language):
if "-" in language:
return (language.split('-')[1]).upper()
else:
return language.upper()
class IndexView(generic.ListView):
"""
this is the ROOT page
return a list of Jobs
"""
template_name='emplois/index.html'
context_object_name='latest_jobs_list'
paginate_by = 10
def language(self):
"""Return the user default language"""
language = language_set(self.request.LANGUAGE_CODE)
language = language.upper()
return language
def get_queryset(self):
"""
Return a list of Jobs that have an EXPIRATION DATE
greater than Now() and a default Language
"""
#import ipdb;ipdb.set_trace()
return Job.objects.filter(language=self.language(),\
EXPIRYDATE__gt=datetime.now())\
.order_by('EXPIRYDATE')
测试:
import pytest
from django.core import mail
from django.contrib.auth.models import AnonymousUser
from django.http import Http404
from django.test import RequestFactory
from mock import patch
from mixer.backend.django import mixer
pytestmark = pytest.mark.django_db
from applications.emplois import views
class TestIndexView:
def test_anonymous(self):
req = RequestFactory().get('/')
resp = views.IndexView.as_view()(req)
assert resp.status_code == 200, 'Should be callable by anyone'
我不使用浏览器,如何绕过语言请求
当您使用 RequestFactory
时,您可以为请求提供任何请求参数。在这种情况下,您正在寻找 request.LANGUAGE_CODE
,因此解决方案是在测试的 RequestFactory
中设置 LANGUAGE_CODE
。
您可以查看 RequestFactory
here 的文档。
所以解决方案是:
def test_anonymous(self):
req = RequestFactory().get('/')
# Here is the change.
req.LANGUAGE_CODE = "en"
resp = views.IndexView.as_view()(req)
assert resp.status_code == 200, 'Should be callable by anyone'