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)