Django:如何使用 RequestFactory 测试视图上下文?
Django: How to test view context with RequestFactory?
我正在编写单元测试并使用 RequestFactory
创建 request
对象,因为我几乎所有的应用程序都在登录后,我需要设置 request.user
但这种方式无法访问 context
的响应来测试我的视图作为响应的一部分发送的值。
使用测试客户端时,我可以通过这种方式获取上下文 response.context_data['form']
并针对它编写断言。
测试需要登录的视图的正确方法是什么?我还尝试用调试器检查 response
对象,但找不到任何类似于 context
.
的东西
我不明白你为什么不使用测试客户端。它支持 logging a user in,然后您可以根据需要断言上下文。
测试客户端通过可能不必要的中间件并使测试变慢。
测试应遵循F.I.R.S.T
快速、独立、可重复、Self-validating 和彻底。
class AddNewTopicTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
username="sourabh", email="email@something.com", password="Somepassword"
)
self.factory = RequestFactory()
def test_csrf_token_is_present_in_get_request_to_create_topic_view(self):
kwargs = {"slug": "some-args"}
request = self.factory.get(reverse("new_topic", args=(self.board_obj.slug,)))
request.user = self.user
response = CreateTopicView.as_view()(request, **kwargs)
self.assertTrue(response.context_data)
我正在编写单元测试并使用 RequestFactory
创建 request
对象,因为我几乎所有的应用程序都在登录后,我需要设置 request.user
但这种方式无法访问 context
的响应来测试我的视图作为响应的一部分发送的值。
使用测试客户端时,我可以通过这种方式获取上下文 response.context_data['form']
并针对它编写断言。
测试需要登录的视图的正确方法是什么?我还尝试用调试器检查 response
对象,但找不到任何类似于 context
.
我不明白你为什么不使用测试客户端。它支持 logging a user in,然后您可以根据需要断言上下文。
测试客户端通过可能不必要的中间件并使测试变慢。 测试应遵循F.I.R.S.T 快速、独立、可重复、Self-validating 和彻底。
class AddNewTopicTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
username="sourabh", email="email@something.com", password="Somepassword"
)
self.factory = RequestFactory()
def test_csrf_token_is_present_in_get_request_to_create_topic_view(self):
kwargs = {"slug": "some-args"}
request = self.factory.get(reverse("new_topic", args=(self.board_obj.slug,)))
request.user = self.user
response = CreateTopicView.as_view()(request, **kwargs)
self.assertTrue(response.context_data)