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)
Run Code Online (Sandbox Code Playgroud)
我还建议查看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
Run Code Online (Sandbox Code Playgroud)
我想测试以下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_)
Run Code Online (Sandbox Code Playgroud)
必要的测试是针对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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5868 次 |
| 最近记录: |