gpt4 book ai didi

django - 使用 Django 的 LiveServerTestCase Monkeypatching View

转载 作者:行者123 更新时间:2023-12-04 16:45:20 25 4
gpt4 key购买 nike

我正在尝试使用 Selenium 为我的应用程序的前端行为编写测试。但是,我尝试测试的页面从 Solr 获取数据,我不想启动 Solr 实例来运行测试。

我正在使用 py.test 和 py.test-django我的测试,我正在尝试对 View 进行 monkeypatch,以便对 Selenium 浏览器发送的数据进行断言。

例如,这是一个我预计会失败的测试:

def test_search(self, live_server, browser, monkeypatch):
def mockview(request):
from django.http import HttpResponse
assert True == False
return HttpResponse('Test')

monkeypatch.setattr(project.app.views, 'search', mockview)

browser.get(live_server.url + reverse('app:search'))

当浏览器尝试加载“app:search”页面时,我希望这会失败。相反,它加载页面的正常版本并且测试成功。

有没有办法获得这种行为?或者是否有更好的方法来处理这些测试?

最佳答案

您正在猴子修补 View 模块中的 View 函数。任何已经导入该 View (对该函数的引用)的位置仍将保留对旧(真实) View 函数的引用。

Django 的 urlconf 机制在第一个请求(可能发生在另一个测试用例中)时使用真实 View 导入并配置自身。

当您更改 View 模块中的函数时,urlconf 不会注意到它,因为它已经包含对旧 View 函数的引用。 Python 中的猴子修补会更改名称/引用,而不是函数本身。

您正在使用 pytest 的 monkeypatch 帮助程序,但模拟库文档中的本指南提供了一些有关在何处应用猴子补丁的有用信息:

http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch

在这种特殊情况下,我认为最好的办法是用静态测试数据而不是 View 来修补 Sorl 调用。由于您正在进行 Selenium 测试,我认为保持真实 View 会非常好。如果替换整个 View ,您实际上在测试什么?

如果 View 本身包含大量特定于 Sorl 的代码,您可能希望将这些代码分解为一个单独的函数,然后您可以轻松地修补它。

如果你真的想改变 View ,我建议你覆盖 urlconf 以指向你的新 View : https://pytest-django.readthedocs.org/en/latest/helpers.html#pytest-mark-urls-override-the-urlconf

关于django - 使用 Django 的 LiveServerTestCase Monkeypatching View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com