- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在追寻一个问题,即实现用于测试 Pylons Controller 功能的模拟。
我正在尝试测试的特定功能可以在这里找到:https://hg.mozilla.org/build/buildapi/file/efe11511f42d/buildapi/controllers/selfserve.py#l210
目标:
我只是想模拟它调用的函数,以便我可以确认它最终调用了 get_completeness。
问题:
我可以很好地模拟 _ok、_get_stable_delay、_failed 和 _branches_cache。但是当涉及到 g.buildapi_cache.get_builds_for_revision 时,我似乎无法正确模拟它,每次我调用 revision() 时,它都会失败。
g 实际上是 pylons.app_globals 并像这样导入到 selfserve.py Controller 中:'from pylons import app_globals as g'
测试:
我正在使用 Python 解释器来测试所有这些。这些是我正在尝试的 2 个实现:http://pastebin.mozilla.org/2931825和 http://pastebin.mozilla.org/2931832
总而言之,这里是解释器中的完整运行,包括 http://pastebin.mozilla.org/2931825 的 Traceback。
>>> from buildapi.controllers.selfserve import SelfserveController
>>> from mock import patch, Mock
>>> s = SelfserveController()
>>> s._ok = Mock(name='_ok')
>>> s._get_stable_delay = Mock(return_value=180)
>>> s._branches_cache = Mock()
>>> s._branches_cache = {'try': None}
>>> s._failed = Mock(return_value="Failed")
>>> with patch('buildapi.controllers.selfserve.g.buildapi_cache.get_builds_for_revision') as get_builds_for_revision:
... get_builds_for_revision.return_value = ['baz', 'bang']
... result = revision('try', 'bar')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1252, in __enter__
self.target = self.getter()
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1414, in <lambda>
getter = lambda: _importer(target)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1102, in _importer
thing = _dot_lookup(thing, comp, import_path)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1089, in _dot_lookup
return getattr(thing, comp)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/paste/registry.py", line 137, in __getattr__
return getattr(self._current_obj(), attr)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/paste/registry.py", line 197, in _current_obj
'thread' % self.____name__)
TypeError: No object (name: app_globals) has been registered for this thread
这里是 http://pastebin.mozilla.org/2931832
>>> from buildapi.controllers.selfserve import SelfserveController
>>> from mock import patch, Mock
>>> s = SelfserveController()
>>> s._ok = Mock(name='_ok')
>>> s._get_stable_delay = Mock(return_value=180)
>>> s._branches_cache = Mock()
>>> s._branches_cache = {'try': None}
>>> s._failed = Mock(return_value="Failed")
>>> g = Mock()
>>> g.buildapi_cache = Mock(name='buildapi_cache')
>>> g.buildapi_cache.get_builds_for_revision = Mock(name='get_builds_for_revision', return_value=['baz', 'bang'])
>>> s.revision('try', 'bar')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "buildapi/controllers/selfserve.py", line 217, in revision
job_items = g.buildapi_cache.get_builds_for_revision(branch, revision)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/paste/registry.py", line 137, in __getattr__
return getattr(self._current_obj(), attr)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/paste/registry.py", line 197, in _current_obj
'thread' % self.____name__)
TypeError: No object (name: app_globals) has been registered for this thread
这与我在尝试运行修订版时遇到的错误相同。每次它都会在这里出错,因为我尝试模拟这个 app_globals 模块失败了,或者看起来是这样。我真的不知道还有什么办法可以试试这个。 有人有什么想法吗?
这里有一些更好的细节:
注一
我已经查看了以下似乎不太适用于此特定场景的线程,或者我完全忽略了这一点。
最佳答案
如果没有初始化的 Pylons 环境, Controller 不能用作独立对象。
使用 Pylons 提供的测试功能可以让您免于使用所有样板代码来测试 Controller 。
我建议您将 TestController 类与 nosetests 结合使用,如 documentation 所示。 .
特别是对于您的代码,我认为 Pylons 对待私有(private)方法(以_开头)与公共(public)方法不同,因为公共(public)方法在请求的上下文中运行。
关于python - 使用 mock 模拟导入的模块以测试 Pylons Controller 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500609/
我知道 Pylons 已停产并导入到 Pyramid。然而,我真的很喜欢学习 Pylons 并且无法通过 Pyramid(这还为时过早并且缺乏对初学者友好的文档)所以我开始阅读 online Pylo
在django中,我们可以执行以下操作: views.py : def A(request): context = {test : 'test'} return
我按照应用程序运行 pylons 项目的测试: http://pylonshq.com/docs/en/0.9.7/i18n/#testing-the-application 但是当我运行时: no
我正在尝试设置 celery 和 pylons,但似乎无法正常工作。我下载了 pylons-celery,但是如何将我的 Pylons 环境指向 celeryconfig.py 所在的位置?我将配置文
我有一个基于 pylons 的 webapp,我很想在一段时间内使用 celery + rabbitmq 来完成任务。我已经查看了 celery-pylons 项目,但我没有成功使用它。 我对 cel
我想为连接到我的 Web 应用程序(用 Pylons 编写)的每个浏览器跟踪一个唯一标识符。我在客户端保留一个 cookie 来跟踪这个,但如果 cookie 不存在,然后我想生成一个新的唯一标识符,
这就是我发现理论上应该从 git hub.compassenger-pylons-wsgi-example 工作的内容 import os, sys
我试图将公司模块导入我的软件,但出现错误: ImportError: No module named config 来自: from pylons.config import config 很明显,我
我正在研究 Pylons 并想知道,我应该使用 Paste 作为网络服务器还是可以使用 Apache? 使用粘贴有什么优势吗? 您会建议不要使用 Apache 吗? 我应该如何托管网站? 最佳答案 我
当我尝试在虚拟 python 环境中导入 pylons 时出现错误 C:\env\Scripts>python Python 2.7 (r27:82525, Jul 4 2010, 07:43:08
更新:这只是 Pylons 应用程序中的一个导入错误(因为 $PYTHONPATH 在运行已启动的作业时不同)导致了失败重生周期。非常感谢那些告诉我查看日志的人。 大家好 我在 OS X 上,试图设置
有没有一种真正的方法可以在 Pylons 中添加身份验证?我见过很多不同的方法,但大多数方法要么过时,要么过于复杂。是否有教程可以解释如何以良好而可靠的方式添加身份验证? 最佳答案 考虑使用 repo
我正在考虑是否应该在我的项目中使用 Turbogears 或 Pylons。我知道 Turbogears2 基于 Pylons。 Turbogears 提供了 Pylon 没有的什么? 谢谢。 最佳答
我正在评估一些 Web 应用程序框架,最后,两个最大的竞争者(在我看来)是 Ruby on Rails 和 Pylons。为了在不花费太多时间的情况下更好地理解这两个框架,我决定在一个框架上遵循一个重
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
from decorator import decorator from pylons.decorators.util import get_pylons def allowed_roles(role
有没有办法创建一个中间件来捕获每个引发的异常并将堆栈跟踪打印到 Pylons 框架中的日志和标准输出(可能带有一些附加信息)? 最佳答案 标准paste.exceptions.errormiddlew
Only comments associated with the current page should be listed, so once again the query is modified
我有一个旧项目,它是在 Python 2.5/2.6、Windows 下编写的。 我们现在有 Python 2.6/Win7/x64,我试着启动它。我得到了在服务器上运行非 Debug模式的旧项目,并
我正在运行 Pylons ,我这样做了:粘贴服务器开发.ini它在 :5000 上运行 但是当我再次尝试运行命令时:粘贴服务 development.ini 我收到这条消息:socket.error:
我是一名优秀的程序员,十分优秀!