Let*_*t4U 6 python pylons configparser pyramid
在一个真正的金字塔应用程序中,它不适用于每个文档http://docs.pylonsproject.org/projects/pyramid//en/latest/narr/testing.html:
class FunctionalTests(unittest.TestCase):
def setUp(self):
from myapp import main
app = main({})
Run Code Online (Sandbox Code Playgroud)
例外:
Traceback (most recent call last):
File "C:\projects\myapp\tests\model\task_dispatcher_integration_test.py", line 35, in setUp
app = main({})
File "C:\projects\myapp\myapp\__init__.py", line 207, in main
engine = engine_from_config(settings, 'sqlalchemy.')
File "C:\projects\myapp\ve\lib\site-packages\sqlalchemy\engine\__init__.py", line 407, in engine_from_config
url = options.pop('url')
KeyError: 'url'
Run Code Online (Sandbox Code Playgroud)
原因很简单:传递一个空字典main,虽然看起来在运行真实应用程序(从__init__.py)时它会settings预先填充来自/的[app:main]部分的值:development.iniproduction.ini
settings {'ldap_port': '4032', 'sqlalchemy.url': 'postgresql://.....}
Run Code Online (Sandbox Code Playgroud)
是否有某种方法settings可以轻松地从.ini文件中进行功能测试?
Ant*_*ala 11
pyramid.paster.get_appsettings 是你唯一需要的东西:
from pyramid.paster import get_appsettings
settings = get_appsettings('test.ini', name='main')
app = main(settings)
Run Code Online (Sandbox Code Playgroud)
这test.ini可以包含另一个.ini文件的所有设置,如下所示:
[app:main]
use = config:development.ini#main
Run Code Online (Sandbox Code Playgroud)
然后你只需要覆盖那些改变的键(我猜你想要对一个单独的DB进行测试):
[app:main]
use = config:development.ini#main
sqlalchemy.uri = postgresql://....
Run Code Online (Sandbox Code Playgroud)