基于 Django Class 的视图传递自定义请求
Django Class-based view pass custom request
我在项目中使用unittest
,以下是我的测试代码。
import unittest
from unittest.mock import patch, Mock
from lists.views import NewListView
@patch('lists.views.NewListForm')
class NewListViewUnitTest(unittest.TestCase):
def setUp(self):
self.request = HttpRequest()
self.request.POST['text'] = 'new list item'
self.request.user = Mock()
def test_passes_POST_data_to_NewListForm(self, mockNewListForm):
NewListView(self.request) # The important bit
mockNewListForm.assert_called_once_with(data=self.request.POST)
我想传递一个自定义请求,如您所见,它有一些 POST 数据。我本来有一个视图,所以我可以传递一个自定义请求。现在,有了基于 class 的视图,我该怎么做?我目前收到一条错误消息:
TypeError: __init__() takes 1 positional argument but 2 were given
我确实尝试过 NewListView.as_view(self.request)
,但那是
TypeError: as_view() takes 1 positional argument but 2 were given
我知道你应该使用 Django 测试客户端并使用 URL 发出 POST 请求,而不是调用实际视图,但这是他们在我目前正在学习的书中的做法(Harry Percival 的 Python 测试驱动开发。不幸的是,他似乎没有更新他的附录,他在那里教授基于 class 的视图内容, 所以我自己做。或尝试。)
谢谢。
你快到了。 as_view()
创建可以处理请求的 CBV 的功能视图版本:
@patch('lists.views.NewListForm')
class NewListViewUnitTest(unittest.TestCase):
# ...
def test_passes_POST_data_to_NewListForm(self, mockNewListForm):
NewListView.as_view()(self.request)
mockNewListForm.assert_called_once_with(data=self.request.POST)
我在项目中使用unittest
,以下是我的测试代码。
import unittest
from unittest.mock import patch, Mock
from lists.views import NewListView
@patch('lists.views.NewListForm')
class NewListViewUnitTest(unittest.TestCase):
def setUp(self):
self.request = HttpRequest()
self.request.POST['text'] = 'new list item'
self.request.user = Mock()
def test_passes_POST_data_to_NewListForm(self, mockNewListForm):
NewListView(self.request) # The important bit
mockNewListForm.assert_called_once_with(data=self.request.POST)
我想传递一个自定义请求,如您所见,它有一些 POST 数据。我本来有一个视图,所以我可以传递一个自定义请求。现在,有了基于 class 的视图,我该怎么做?我目前收到一条错误消息:
TypeError: __init__() takes 1 positional argument but 2 were given
我确实尝试过 NewListView.as_view(self.request)
,但那是
TypeError: as_view() takes 1 positional argument but 2 were given
我知道你应该使用 Django 测试客户端并使用 URL 发出 POST 请求,而不是调用实际视图,但这是他们在我目前正在学习的书中的做法(Harry Percival 的 Python 测试驱动开发。不幸的是,他似乎没有更新他的附录,他在那里教授基于 class 的视图内容, 所以我自己做。或尝试。)
谢谢。
你快到了。 as_view()
创建可以处理请求的 CBV 的功能视图版本:
@patch('lists.views.NewListForm')
class NewListViewUnitTest(unittest.TestCase):
# ...
def test_passes_POST_data_to_NewListForm(self, mockNewListForm):
NewListView.as_view()(self.request)
mockNewListForm.assert_called_once_with(data=self.request.POST)