【问题标题】:Is there any way to get the default domain of Client() in unittest of Django?有没有办法在 Django 的单元测试中获取 Client() 的默认域?
【发布时间】:2016-01-04 12:23:46
【问题描述】:

我想在 Django 单元测试中获取默认域名Client()。我看到了一种更改默认值的方法。但是没有找到获取默认域名的方法。

【问题讨论】:

  • 假设您有一个名为clientClient() 实例,client.environ['SERVER_NAME'] 是否包含您想要的内容?
  • 我认为 Client() 没有 environ 属性
  • 认为是这样,还是你测试过?
  • 是的。我只是累了。我现在尝试运行我的测试,

标签: python django python-2.7 django-unittest


【解决方案1】:

Django 测试客户端的默认域名是testserver。它是RequestFactory 基类中的hardcoded

如果您想为特定请求更改域,您可以将其作为 kwarg 传递:

self.client.get('/some-path', SERVER_NAME="anotherdomain.com")

【讨论】:

  • 啊,我明白了。无论如何,请考虑将此答案标记为已接受,因为它回答了您提出的确切问题:Django 测试的默认域Client()。或者改写你最初的问题,以便你自己的答案与它一致。
【解决方案2】:

我刚试过https://docs.djangoproject.com/en/1.9/topics/testing/tools/#liveservertestcase

默认测试 URL 将是 http://localhost:8082,我们可以在运行测试时请求相同的 URL。它为我工作。

【讨论】:

  • 当然,但您的问题是关于Client 类中的域名,而不是关于LiveServerTestCase 的绑定端口。那是完全不同的事情。
  • 是的,你是对的。实际上我需要在本地运行测试并将请求手动发送到 url。 LiveServerTestCase 通过 self.live_server_url 向我返回 uri
【解决方案3】:

这是您正在寻找的(pytest)答案吗?

@pytest.fixture()
def client() -> "django.test.client.Client":
    """like the default pytest client with a new domain name."""
    skip_if_no_django()
    return Client(SERVER_NAME = 'my-server.com')

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2015-01-10
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2023-03-12
相关资源
最近更新 更多