【发布时间】:2018-09-12 14:13:13
【问题描述】:
我正在处理一个已经有数百个单元测试的项目,其中许多使用内置的 django 客户端或 django rest 框架 APIClient 来发出请求和测试响应。
最近实现了使 SSL 在本地工作的必要条件,并将 SECURE_SSL_REDIRECT 设置为 True(试图使我们的 dockerised dev 和 test 环境尽可能接近production 可能),我发现这么多单元测试失败了,因为(API)客户端请求,默认情况下,总是使用http,而不是https。
许多(大多数)请求如下所示:
response = self.client.get(some_url)
我知道我可以使用:
response = self.client.get(some_url, secure=True)
但这确实意味着要更改很多单元测试。使用 follow=True 也是如此,但还有一个额外的缺点,那就是这可能会产生一些其他不受欢迎的行为。
我看不到在 Django 客户端中将安全请求的使用设置为默认行为的方法。我可以制作自己的 SecureClient(和 SecureAPIClient),但我必须确保创建一个新的基础 TestCase(可能是多个)来继承,并为所有测试在任何地方更改它 - 仍然有很多工作。
当然可以对客户端进行猴子补丁,但我不愿意这样做,因为它可能会产生以后难以调试的不良影响。
TLDR;是否有一种简单(理想支持)的方式,通过 django 测试的客户端发出所有单元测试请求,默认使用 SSL?
【问题讨论】:
标签: django unit-testing ssl django-rest-framework