- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
虽然 Pyramid 文档通常非常好,但我找不到如何设置 integration tests for a Pyramid 1.5 application(注意缺少基本代码片段!)。也就是说,将特定配置放在哪里。
在 __init__ 中我有 main() 函数,它包括一些其他模块,其中有一个需要 SQLAlchemy。另一个复杂的问题是授权策略取决于设置,所以所有内容都在 main 中(否则我做了 includeme,不确定它是否与这个问题相关)。
起初我尝试了以下方法(在收集了我能做的 includeme 函数之后):
class ViewTests(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
self.config.include('myproject.includeme')
这当然在 sqlalchemy engine_from_config 的某处失败了。但是后来我有了 found ,我可能可以使用 main() 并提供 test.ini 进行配置。我仍然喜欢要点的全包方法:
class IntegrationTestBase(BaseTestCase):
@classmethod
def setUpClass(cls):
cls.app = main({}, **settings)
super(IntegrationTestBase, cls).setUpClass()
def setUp(self):
self.app = webtest.TestApp(self.app)
self.config = testing.setUp()
super(IntegrationTestBase, self).setUp()
上面代码的部分问题是设置没有在 self.config 中结束。如果我用 self.config = testing.setUp(settings=settings)
增强它,测试仍然失败:
AttributeError: 'DummyRequest' object has no attribute 'include'
pyramid_bowerstatic 没有机会修改请求等。因此,与其使用给定的配置进行开箱即用的集成测试(应用程序本身没有提示!)并专注于编写测试,我需要关心所有第三方模块的突发奇想。
因此,我希望有一些更好的方法来进行集成测试,这些测试处理几个包含的包、自定义身份验证策略、事件和其他“魔法”。
如果重要的话,将使用 Py.test。 pytest_pyramid 似乎是相关的,但文档没有任何示例。
不完全是,但类似的问题:How to Make view_config decorator work with a Pyramid Unit Test?,尤其是在对答案的评论中。
我在日语中找到了临时解决方案(目前对我有用):http://qiita.com/podhmo/items/2c6d8cb78c1f84569f0a
但问题是如何在不查看第三方模块的情况下可靠地设置集成测试,等同于所有方面的应用程序,特定的 ini 文件除外?
更新:这是有问题的调用之一:
查看:
components = pyramid_bowerstatic.create_components('sbadmin',
os.path.join(os.path.dirname(__file__), 'bower_components'))
class MainViews(Layouts):
@view_config(route_name='home', renderer='templates/mytemplate.pt')
def my_view(self):
self.request.include(components, 'jquery')
return {'project': 'Myproject'}
在测试中:
class ViewTests(IntegrationTestBase):
def test_my_view(self):
from myproject.views.main import MainViews
request = self._make_request(self.config) # before was: DummyRequest
info = MainViews(request).my_view()
self.assertEqual(info['project'], 'Myproject')
由于 Pyramid 的良好解耦架构,可能足以满足所有要求。也就是说,问题可以重新表述为:什么是通用的 _make_request 函数,它给出的结果与正在运行的应用程序请求相同(具有扩展、补间、添加的请求属性,包括来自第 3 方模块的属性等)?有现成的工厂吗? 恕我直言,如果开发人员需要模拟它自己的“集成”来测试与采用应用程序的真实情况,那么这不是集成测试。我不确定这些是否是唯一的东西,但我想工厂至少应该提供一个包含所有钩子(Hook)的请求,就像这里提到的:http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html,不管是哪个包含的包添加了它们。
更新 2:我想到,对于测试和运行时环境之间的差异,有一个非常清晰的第一近似指标。我比较了对 View 的正常调用和测试调用的请求。首先,这是我的 _make_request,它足以添加请求方法,但还缺少更多(如下):
def _make_request(self, config, path="/"):
from pyramid.request import Request
from pyramid.interfaces import IRequestExtensions
request = Request.blank(path)
extensions = config.registry.getUtility(IRequestExtensions)
request.registry = config.registry
request._set_extensions(extensions)
return request
普通调用有如下属性(request.__dict__.keys()):
['traversed',
'virtual_root',
'virtual_root_path',
'subpath',
'request_iface',
'__view__',
'view_name',
'tm',
'environ',
'registry',
'context',
'matched_route',
'get_bowerstatic_path',
'include',
'root',
'matchdict',
'invoke_subrequest']
并且只测试调用这些:
['environ',
'registry',
'get_bowerstatic_path',
'include']
这清楚地表明,我的方法还不够,我会遇到使用其他请求功能的 View 的问题。使用上面的 _make_request,只有最小的 View 通过。
换句话说,如何获得在功能测试中使用的相同请求,例如在 webtest 的 TestApp 中,而不是执行 testapp.get(...),而是使用该请求调用 View 并对可调用的返回结果(未呈现为 HTML)进行断言?
最佳答案
由于 RTD 上的临时错误,缺少该基本代码片段。 An Issue has been logged .
这是未包含的代码的链接。 https://github.com/Pylons/pyramid/blob/master/docs/narr/MyProject/myproject/tests.py#L19-L43
[已编辑]
以下是 Pyramid 炼金术支架的两个测试示例。每个都有自己的风格。希望您发现其中之一对您的场景有用。
如果您安装了 Pyramid,您可以从炼金术脚手架创建一个示例项目。
$ $VENV/bin/pcreate -s alchemy tutorial
SQLAlchemy + URL Dispatch Wiki Tutorial如果该命令不适合您,将进入更多细节和先决条件。
脚手架包括这些 tests .
我们正在开发一个更新此脚手架的新分支,目标是在 Pyramid 1.7 中进行合并。这是它的 tests .
如果您 git checkout 该分支,并运行教程步骤,您可以看到完整的上下文。
[已编辑]
这里还有一个值得一看的地方:Pyramid's own integration tests .
顺便说一句,我很难给你一个合适的答案。对于初学者,我看不到在您的测试代码中调用 DummyRequest
的位置。你能在你的问题中给出一个完整的可重现的例子吗?
关于python - 以正确的方式设置 Pyramid 1.5 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776475/
Pyramid 项目中有一个 development.ini 或 production.ini 。我将自己的配置数据添加到 ini 文件如: [thrift] host = 0.0.0.0 port
我想注册一个请求处理程序,但不想使用扫描方法。 为什么我需要调用两个方法(add_route 和 add_view)而不是一个? from wsgiref.simple_server import m
请问我错过了什么。当我想提供已下载到磁盘上的视频文件时,我不断在浏览器中收到内部服务器错误。这是我的代码: View 函数 @view_config(name='download_video') de
请问我错过了什么。当我想提供已下载到磁盘上的视频文件时,我不断在浏览器中收到内部服务器错误。这是我的代码: View 函数 @view_config(name='download_video') de
我目前正在学习如何使用 Python Pyramid Web 框架,并且发现文档非常出色。 然而,在区分“模型”(即在 SQLAlchemy 声明性系统下定义的类)的概念和“资源”(即定义访问控制的方
我一直在尝试让 Pyramid 在谷歌应用程序引擎中运行,但没有成功。我尝试按照说明 here 进行操作但它似乎已经过时了,因为 gae 不再有 appcfg.py 了。我按照应用程序引擎文档中的 F
大多数可用教程都展示了如何使用上游 HTTP 服务器(如 NGINX)设置 uWSGI。但是 uWSGI 本身就可以完美地充当路由器/代理/负载均衡器 - 请参阅 this对于我的项目,我现在不想设置
我正在尝试使用 Pyramid 自省(introspection)接口(interface)从可调用 View 中获取给定资源类型的所有 View 的列表。我可以使用以下方法获取一组已添加的 View
我正在使用 Pyramid 来创建网络应用程序。然后我使用 Pyramid 烧杯将烧杯连接到 Pyramid 的 session 管理系统。 有两个值会影响用户 session 的持续时间。 sess
背景 我对 unicode 和 Python 真是一团糟。这似乎是一个普遍的焦虑,我尝试过使用其他解决方案,但我就是无法解决这个问题。 设置 MySQL 数据库设置 collation_datab
模型 - View - PHP 框架(如 Kohana)的 Controller 的 Pyramid/Python 等价物是什么? In Pyramid "Model" is .... and it
我遵循了 http://docs.pylonsproject.org/docs/pyramid/en/latest/tutorials/wiki/index.html 上的教程 我知道,当我添加或更改
我使用 yapps 为 Pyramid 内的 LaTex 语言生成解析器(例如将 \begin{itemize} 之类的内容翻译成相应的 -Tags)。一个命令(即 \ref{SOMEID} )应该
我正在 Pyramid 框架之上使用 python 制作 webapps。 在我利用 Mechanize 进行一些简单网页抓取的函数之一中,当我将其作为独立的 Python 脚本运行并通过 Pyram
var z = []; for(var i = 1; i len) z.push("a".repeat(len-i%len)) console.log(z.join("\n")); 关于jav
我正在开发 Python Pyramid我需要使用rest api,在其中一个请求中,我需要处理一个excel,对于它的每一行,我都会获取GPS坐标并进行大量验证,这意味着这个唯一的请求可能需要大约1
这是我的 base.html: {% block head %} {% endblock %} {% block body
我一直在尝试使用 Pyramid 框架制作带有复选框和单选按钮的表单,但我不知道如何正确执行。 我正在使用pyramid_simpleform。到目前为止,我已经能够使用 for 循环将复选框放在表单
我按照 Pyramid 教程进行操作,一切正常。然后我为 Pyramid 安装了 jinja2,并将必要的代码行添加到我的 development.ini 文件中。按预期在指定位置找到了我的模板。它们
我的应用程序从用户接收一个或多个 URL(通常为 3-4 个 URL),从这些 URL 中抓取某些数据并将这些数据写入数据库。但是,因为抓取这些数据需要一点时间,所以我正在考虑在单独的线程中运行每个抓
我是一名优秀的程序员,十分优秀!