Python 如何使用pytest测试视图,该视图具有LoginRequired和某些特定的用户依赖项

Python 如何使用pytest测试视图,该视图具有LoginRequired和某些特定的用户依赖项,python,django,pytest,pytest-django,Python,Django,Pytest,Pytest Django,我正在测试一个视图,在测试这个视图时,我得到了这个错误 self = <django.db.models.fields.AutoField: id>, value = '' def get_prep_value(self, value): from django.db.models.expressions import OuterRef value = super().get_prep_value(value) if valu

我正在测试一个视图,在测试这个视图时,我得到了这个错误

self = <django.db.models.fields.AutoField: id>, value = ''

    def get_prep_value(self, value):
        from django.db.models.expressions import OuterRef
        value = super().get_prep_value(value)
        if value is None or isinstance(value, OuterRef):
            return value
>       return int(value)
E       ValueError: invalid literal for int() with base 10: ''

/usr/local/lib/python3.6/site-packages/django/db/models/fields/__init__.py:965: ValueError

url.py test_views.py
我得到了我的答案,实际上主要的问题是重定向,正如@Brachamul在那个问题上建议我的那样,我被重定向到了其他地方,这造成了问题。因此,由于这个观点,测试没有通过。感谢您给我宝贵的时间。

您可以尝试self.client.get方法,该方法将模拟到达视图的真实请求,而不是将请求对象直接传递给基于函数的视图

Django提供了一个测试客户端来模拟用户与 在视图级别编写代码


你可以通过方法将授权传递给客户端。我已经做了但没有工作。你做了什么,什么没有工作?@hoefling我稍微改变了问题,我尝试了self.client.login,但它没有工作,现在我正在使用mixer.blendUser,这可能会有帮助,但我的问题是mixer.blend的用户不在我的数据库中,因此该用户没有个人资料和组织。所以在此之前,我想获取当前用户,并在request.user中传递该用户,或者从我的数据库中传递任何具有配置文件和组织的用户。但它也不起作用,因为它要求的是is_authenticated=True。@hoefling检查这个
@login_required
def dashboard_view(request):
    org = request.user.profile.org
    week_responses = day_wise_responses(7, org)
    user_org = request.user.profile.org.name
    sms_sent = org.sms_counter
    email_sent = org.email_counter
    today = datetime.today().date()
    responses_one_week = number_of_responses(7, org)
    responses_two_week = number_of_responses(14, org)
    average_rating = org_average_rating(org)
    responses_last_week = responses_two_week - responses_one_week
    if responses_last_week:
        responses_percent_change = (abs(responses_one_week - responses_last_week)/responses_last_week)*100
    else:
        responses_percent_change = responses_one_week*100
    # last n responses
    last_5_responses = last_n_responses(5, org)
    # print(last_5_responses)
    context = {'week_responses': week_responses, 'user_org': user_org, 'today': today,
               'responses_one_week': responses_one_week, 'responses_percent_change': responses_percent_change,
               'last_5_responses': last_5_responses, 'sms_sent': sms_sent, 'email_sent': email_sent,
               'average_rating': average_rating}
    return render(request, 'events/dashboard.html', context)
path('dashboard/', include('fancy_tsunami.events.urls')),
from events.views import dashboard_view
from django.test import RequestFactory
from django.urls import resolve, reverse
from django import test
import pytest
from django.contrib.auth.models import User, AnonymousUser


@pytest.mark.django_db
class TestViews(test.TestCase):
    def test_dashboard_view(self):
        path = reverse('event-dashboard')
        request = RequestFactory().get(path)
        # Org = [{'id': 1, 'name': 'Company', 'logo': None, 'share_google_url': None, 'sharing_destinations_id': None, 'sms_counter': 0, 'email_counter': 0}]
        request.user = mixer.blend(User)
        # CheckUser = {'id': 3, 'password': 'argon2$argon2i$v=19$m=512,t=2,p=2$bHZkZ3Q0bmE2bEJU$N6x/LFqwI4guA', 'last_login': None, 'is_superuser': True, 'username': 'nitin', 'first_name': '', 'last_name': '', 'email': 'nitin@gmail.com', 'is_staff': True, 'is_active': True, 'date_joined': datetime.datetime(2019, 2, 21, 1, 10, 32, 146)}
        # request.user = (CheckUser)
        response = dashboard_view(request)
        self.assertEqual(response.status_code, 200)


from django.test import Client
client = Client()
client.get('/path/to/your/views/')