jwa*_*lof 5 python testing webtest flask python-unittest
因此,我尝试为我的 Flask 应用程序编写一些测试几天,但我无法让它运行。测试通过了,但卡在“通过”上。
我克隆了 cookiecutter-flask (cookiecutter-flask),它与 pytest 一起运行 webtest (我认为)。我的conftest.py看起来与存储库 ( conftest.py )中的相同
这些是我当前的测试:
def test_app(testapp):
app = create_app(TestConfig)
res = testapp.get('/')
res.status_code == 200
Run Code Online (Sandbox Code Playgroud)
这过去了,而且还在继续。
def test_create_admin_user(db, testapp):
password = bcrypt.generate_password_hash('test')
User.create(
uid='00000000000000000000',
email='john@doe.com',
password=password,
active=1
)
user = User.query.filter_by(email='j@d.com').first()
assert user.email == 'j@d.com'
Run Code Online (Sandbox Code Playgroud)
这就是我迷失的地方,测试卡在“通过”并且没有做任何事情。当我强制中断进程时,我得到以下信息:
Traceback (most recent call last):
File "manage.py", line 68, in <module>
manager.run()
File "/home/johan/Development/venv_python/local/lib/python2.7/site-packages/flask_script/__init__.py", line 412, in run
result = self.handle(sys.argv[0], sys.argv[1:])
File "/home/johan/Development/venv_python/local/lib/python2.7/site-packages/flask_script/__init__.py", line 383, in handle
res = handle(*args, **config)
File "/home/johan/Development/venv_python/local/lib/python2.7/site-packages/flask_script/commands.py", line 216, in __call__
return self.run(*args, **kwargs)
File "/home/johan/Development/venv_python/local/lib/python2.7/site-packages/flask/ctx.py", line 386, in __exit__
self.auto_pop(exc_value)
File "/home/johan/Development/venv_python/local/lib/python2.7/site-packages/flask/ctx.py", line 374, in auto_pop
self.pop(exc)
File "/home/johan/Development/venv_python/local/lib/python2.7/site-packages/flask/ctx.py", line 357, in pop
% (rv, self)
AssertionError: Popped wrong request context. (<RequestContext 'http://localhost/' [GET] of backend.app> instead of <RequestContext 'http://localhost/' [GET] of backend.app>)
Run Code Online (Sandbox Code Playgroud)
我在 Flask 中找到了关于测试的以下线程(当然,这是 Flask-Testing 但我认为它有一些相关性,也许没有:问题)并更改了我的测试配置,使其包含PRESERVE_CONTEXT_ON_EXCEPTION = False但它仍然只是挂起。
有人有什么想法我可以尝试吗?我对测试本身不太熟悉,所以这可能是我做错了。
您需要使用正确的应用程序上下文
def test_create_admin_user(db, testapp):
with app.app_context():
password = bcrypt.generate_password_hash('test')
User.create(
uid='00000000000000000000',
email='john@doe.com',
password=password,
active=1
)
user = User.query.filter_by(email='j@d.com').first()
assert user.email == 'j@d.com'
Run Code Online (Sandbox Code Playgroud)
有关完整示例,请参阅https://github.com/Leo-G/Flask-Scaffold/blob/master/scaffold/app/tests.py
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |