在Django的unittest中更改Client()的默认域名

23 投票
2 回答
7439 浏览
提问于 2025-04-16 19:14

我正在为Django的视图写单元测试。

class TestLog(unittest.TestCase):
    """Test for Contact"""
    def setUp(self):
        self.c = Client()
        try:
            self.bob = User.objects.create_user("mojo","b@example.com", "bmojo")
        except :
            print ''

    def test_get_emails(self):
        response = self.c.get('/text/')
        self.assertEqual(response.status_code, 200)


    def test_htmlemils(self):
        response = self.c.get('/emails/html/upload')
        self.assertEqual(response.status_code, 200)

这里的 c = Client() 是用 'http://testserver' 作为域名的,我想把这个域名换成我真实的域名,想知道有没有办法自定义这个测试客户端?

2 个回答

1

这段代码不仅可以帮助进行单元测试,还可以帮助在使用DRF(Django REST框架)时,在序列化器中使用上下文。这里的意思是,你可以通过这段代码把请求的信息传递给序列化器,方便后续处理。

from django.test.client import RequestFactory
rf = RequestFactory()
rf.defaults['SERVER_NAME'] = 'my-site.com'
get_request = rf.get('/hello/')
40

Django中的Client是基于RequestFactory的,这意味着你可以把额外的参数作为关键字参数传进去。

你可以试试:

response = self.c.get('/emails/html/upload', SERVER_NAME="mydomain.com")

撰写回答