Fil*_*vić 16
通常,这将包括通过RequestFactory使用关键字参数实例化视图类来创建请求.之后,您可以调用任何视图方法并评估结果,并传递任何必需的参数.
我建议您查看基View类,特别是__init__,as_view和dispatch方法.它们对于理解框架如何与视图对象进行交互至关重要.
最重要的一点要注意有这个观点的方法希望在请求-响应过程中被调用,因此他们允许依赖self.request,self.args以及self.kwargs他们是所谓的前到场,所以一定要确保你已经有了覆盖.
不确定这是否正是您正在寻找的,但这是我尝试单元测试我的视图的示例(下面未经测试的代码):
import unittest
from django.core.urlresolvers import reverse
from django.test.client import RequestFactory
from ..views import MyClassBasedView
class MyClassBasedViewTestCase(unittest.TestCase):
    def setUp(self):
        self.factory = RequestFactory()
    def test_list_view(self):
        request = self.factory.get(reverse('your_url'))
        # additional params can go after request
        response = MyClassBasedView.as_view()(request)
        self.assertEqual(response.status_code, 200)
我还建议查看Filip在他的回答中提到的文档.
我正在为今天的同一个问题寻找一个简单的解决方案,并发现BenoîtBryon 这个非常棒的博客文章(谢谢!).
他提出了以下功能:
def setup_view(view, request, *args, **kwargs):
    """Mimic as_view() returned callable, but returns view instance.
    args and kwargs are the same you would pass to ``reverse()``
    """
    view.request = request
    view.args = args
    view.kwargs = kwargs
    return view
我想测试以下CBV:
class CreateList(CreateView):
    model = Item
    form_class = NewListForm
    template_name = 'lists/home_page.html'
    def form_valid(self, form):
        list_ = form.save(owner=self.request.user)
        return redirect(list_)
必要的测试是针对form.save方法参数和redirect参数,它们应该是前者的返回值.这些测试看起来像:
    class CreateListTest(unittest.TestCase):
        def setUp(self):
            self.request = HttpRequest()
            self.request.user = Mock()
            self.form = Mock()
            self.view = setup_view(views.CreateList(), self.request)
        def test_form_dot_save_called_with_user(self):
            self.view.form_valid(self.form)
            self.form.save.assert_called_once_with(owner=self.request.user)
        @patch('lists.views.redirect')
        def test_redirect(self, mock_redirect):
            self.view.form_valid(self.form)
            mock_redirect.assert_called_once_with(self.form.save.return_value)
| 归档时间: | 
 | 
| 查看次数: | 5868 次 | 
| 最近记录: |