关于Djang的测试问题

2024-04-26 11:59:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新的测试和教程没有帮助我一点(他们要么是旧的或不适用于我的情况)。在

我想在Django上测试一些功能。假设我想测试一下:

class PageDetailView(AuthorizedView, PermissionRequiredMixin, DetailView):
    """
    Page Detail View

    This view will load the whole dataset for a Page
    """
    permission_required = 'view_page'
    # This is temporary. The idea is to redirect user to a call_to_action page
    redirect_field_name = 'panel'
    model = Page
    template_name = 'twist/entity_topic_detail.html'

    def get_context_data(self, **kwargs):
        context = super(PageDetailView, self).get_context_data(**kwargs)
        evaluated_news = EvaluatedNews(self.object,
                                   self.request.user)
        context['evaluated_news'] = evaluated_news()
        context['modules'] = [
            'sources',
            'ranking',
            'topics',
            'locations_coord',
            'terms',
            'news',
            'relations',
            'twitterterms',
            'twittertweets',
            'twitterheatmap'
            ]
        return context

如何申请考试?在

url的设置方式如下:

^{pr2}$

--编辑

例如,现在我被困在一些本应是基本的东西。。。在

测试:

导入单元测试 从django.测试导入请求工厂 从扭曲视图进口*

^{3}$

错误:

'if test_func(request.user):                                          │~                                                          
AttributeError: 'WSGIRequest' object has no attribute 'user''

Tags: tonameselfviewgetiscontextpage
1条回答
网友
1楼 · 发布于 2024-04-26 11:59:40

好吧,最简单的方法就是编写测试整个视图流的集成测试。使用django测试可以很容易地做到这一点客户:在

from django.test import TestCase

class TestPageDetailView(TestCase):

    def setUp(self):
        self.id = '234' # some valid id for your use cacse
        self.url = "/detail/{0}/".format(url = self.id)

        self.response = self.client.get(self.url)

    def test_returns_valid_response(self):
        self.assertEqual(self.response.status_code, 200)

    def test_returns_correct_context_variables(self):
        expected_context_vars = ['sources', 'ranking', 'topic'] # ...

        map(lambda context_var: self.assertIn(context_var, self.response.context), expected_context_vars)

显然,这并不是详尽无遗的,您需要处理身份验证和其他东西,但需要处理这些行中的一些内容。在

不过,如果您想单独对某个方法进行单元测试,则需要获得由as_view返回的函数中生成的类实例。通常我更喜欢集成测试而不是测试视图,但是有时候如果您真的需要对某些部分进行单元测试,您可以执行以下操作

^{pr2}$

现在,您可以像测试普通类一样测试视图。在

就您的编辑的答案而言,需要将user分配给请求,而不是测试类实例

request.user = User.objects.create_user(username="admin", password="123")

而不是

self.user = User.objects.create_user(username="admin", password="123")

相关问题 更多 >