自定义上下文处理器,UnitTests和请求工厂

5 django unit-testing requestfactory

我已经开始使用自定义上下文处理器将对象传递给每个响应.唯一的问题是我的测试现在失败了,因为他们无法在数据库中找到这个对象.我尝试使用Request Factory创建一个测试,因为我的理解是这会将测试与Django膨胀隔离,就像中间件一样.我猜测上下文处理器仍在运行.有没有办法克服这个?我是否必须将此对象传递给每个测试?如果有任何办法可以避免它,我宁愿这样做.

小智 2

经过进一步调查,我认为最好的解决方案是在每次测试期间覆盖 context_processors 元组。从 1.4 开始这已经成为可能。这似乎比将所需的对象发送到每个测试更好。我想研究是否可以为其编写一个自定义装饰器,但对它们还不够了解。参考:https://docs.djangoproject.com/en/dev/topics/testing/overview/#overriding-settings

编辑:这里概述了该解决方案的另一个实现:How to Unit test with different settings in Django?可能更好,因为它可以为整个测试完成。

edit2:发现装饰器实际上是Python构造(假设它们是自定义的django功能!顺便说一句,Python的大量新手。在我学习任何Python之前学习了Django),我认为自定义装饰器是我将要采用的方式。

edit3:我认为实际上一个更简单的解决方案是在我的设置模块中包含一个 test.py 文件,并用测试中的测试设置覆盖我的基本设置 context_processor 模块。例如:

from settings import localsettings
from settings import testsetttings

localtestsettings.context_processors = testsettings.context_processors

tests(unittest):.....
Run Code Online (Sandbox Code Playgroud)

任何其他建议都非常受欢迎。

编辑4:好的。我现在觉得自己很蠢。显然,我最终使用的解决方案是创建一个测试设置文件,并将其传递给测试命令。