Django:如何使用RequestFactory测试视图上下文?

时间:2019-09-26 20:22:46

标签: django django-tests

我正在编写单元测试并使用request创建RequestFactory对象,因为几乎我的所有应用都处于登录状态,并且我需要设置request.user,但是这种方式无法访问{{1 }},以测试我的视图作为响应的一部分发送的值。

在使用测试客户端时,我可以这样context来获取上下文并针对它编写断言。

测试需要登录的视图的正确方法是什么?我还尝试使用调试器检查response.context_data['form']对象,但找不到类似response的东西。

2 个答案:

答案 0 :(得分:3)

我不明白您为什么不使用测试客户端。它支持logging a user in,然后您可以根据需要在上下文中进行断言。

答案 1 :(得分:0)

测试客户端会通过可能不需要的中间件,这会使测试变慢。 测试应遵循F.I.R.S.T 快速,独立,可重复,自验证且彻底。

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)