當使用谷歌應用程序引擎1.6.4 testbed與Flask 0.8斷裂,且特別是0.1 Flask-Login包(source),I遇到命令行的單元測試一個奇怪的問題。燒瓶登錄包通過導入谷歌應用程序引擎的測試臺
下面是一個演示問題的例子。請注意註釋行(from google.appengine.ext import testbed
)。當該行被評論時,測試按預期工作。
當該行被取消註釋時,@login_required
Flask-Login
的裝飾器停止識別登錄用戶,即current_user.is_authenticated()
返回False。這似乎是罪魁禍首是進口testbed
。
#!/usr/bin/env python2.7
import unittest
import sys
from flask import Flask, current_app, url_for
from flaskext import login
sys.path.append('/usr/local/google_appengine')
# Go ahead and uncomment this:
# from google.appengine.ext import testbed
app = Flask('test')
app.secret_key = 'abc'
login_manager = login.LoginManager()
login_manager.setup_app(app)
login_manager.login_view = 'index'
class User(login.UserMixin):
def get_id(self):
return "1"
@login_manager.user_loader
def load_user(user_id):
return User()
@app.route('/')
@login.login_required
def index():
pass
@login_manager.unauthorized_handler
def unauthorized():
raise Exception("Unauthorized.")
class MyTest(unittest.TestCase):
def setUp(self):
self.app = app
self.client = app.test_client()
def test_user(self):
with self.app.test_request_context():
logged_in = login.login_user(User())
r = self.client.get('/')
if __name__ == '__main__':
unittest.main()
具體的例外是:
ERROR:test:Exception on/[GET]
Traceback (most recent call last):
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 1504, in wsgi_app
response = self.full_dispatch_request()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 1264, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 1262, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 1248, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Flask_Login-0.1-py2.7.egg/flaskext/login.py", line 479, in decorated_view
return current_app.login_manager.unauthorized()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Flask_Login-0.1-py2.7.egg/flaskext/login.py", line 250, in unauthorized
return self.unauthorized_callback()
File "./test.py", line 34, in unauthorized
raise Exception("Unauthorized.")
Exception: Unauthorized.
我所期望的行爲是導入(使用)testbed
將有瓶上下文堆棧沒有影響,並且,通過擴展,瓶,登錄會即使已導入testbed
,仍繼續在單元測試環境中工作。
我已經注意到了這一點,沒有用,並且會對任何洞察力和建議來解決這個問題的潛在解決方案感激不盡。
謝謝您的閱讀。
在試圖找到解決方法時,我發現'flask.g'和其他相關變量似乎也不可用。 – 2012-04-03 21:59:02