2017-08-30 7 views
0

Flaskビュー機能で機能テストをしようとしています。 は現在、私はフラスコセキュリティモジュールからのログイン、ログアウトを使用していると私は、フラスコのドキュメント(http://flask.pocoo.org/docs/0.12/testing/#logging-in-and-out)からのログインおよびログアウトのガイドに従うことをしようとすると、ログインの「ポスト」は動作していないようです。リクエストモジュールを使用して投稿しようとすると、この同じエラーが発生しています。 マイフラスコ-Securityのログインエンドポイントは、/ login_test/Flask-Security Login機能テスト

以下は私のユニットテストコードの一部ですです。

class TestUser(unittest.TestCase): 
    #run before each test 
    def setUp(self): 
     self.client = app.test_client() 
     db.create_all() 


    def tearDown(self): 
     #db.session.remove() 
     #DropEverything().drop_db() 
     pass 

    def login(self, email, password): 
     return self.client.post('/login_test/', data=dict(
      email=email, 
      password=password 
     ), follow_redirects=False) 

    def logout(self): 
     return self.client.get('/logout', follow_redirects=True) 

    def test_login_logout(self): 
     response = self.client.post('/login_test', data=dict(
      email='admin', 
      password='admin' 
     ), follow_redirects=False) 
     self.assertIn(b'You logged in', response.data) 

test_login_logoutを押した後のエラーメッセージは次のとおりです。私は「/ login_test」でURLを打ったとき、以下の私は//login_testにURLを変更した場合、私はHTTP 400エラーを取得

Ran 1 test in 0.187s 

FAILED (failures=1) 

Failure 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/case.py", line 58, in testPartExecutor 
    yield 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/case.py", line 600, in run 
    testMethod() 
    File "/Users/genom003dm/PycharmProjects/sample_accessioning_dev/app/tests/user_management_testing.py", line 38, in test_login_logout 
    ), follow_redirects=False) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/werkzeug/test.py", line 801, in post 
    return self.open(*args, **kw) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/testing.py", line 127, in open 
    follow_redirects=follow_redirects) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/werkzeug/test.py", line 764, in open 
    response = self.run_wsgi_app(environ, buffered=buffered) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/werkzeug/test.py", line 677, in run_wsgi_app 
    rv = run_wsgi_app(self.application, environ, buffered=buffered) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/werkzeug/test.py", line 884, in run_wsgi_app 
    app_rv = app(environ, start_response) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1997, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1985, in wsgi_app 
    response = self.handle_exception(e) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1540, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1590, in dispatch_request 
    self.raise_routing_exception(req) 
    File "/Users/genom003dm/sample_accessioning_dev_virtual_env/lib/python3.5/site-packages/flask/app.py", line 1576, in raise_routing_exception 
    raise FormDataRoutingRedirect(request) 
flask.debughelpers.FormDataRoutingRedirect: b'A request was sent to this URL (http://localhost/login_test) but a redirect was issued automatically by the routing system to "http://localhost/login_test/". The URL was defined with a trailing slash so Flask will automatically redirect to the URL with the trailing slash if it was accessed without one. Make sure to directly send your POST-request to this URL since we can\'t make browsers or HTTP clients redirect with form data reliably or without user interaction.\n\nNote: this exception is only raised in debug mode' 

です。私はログインのためにフォームオブジェクトが見つからないという事実が原因でこれが起こっていると仮定していますか? (しかし、私はpost apiでログインしようとしているので、この場合はフォームオブジェクトがありません)。私が知りたい

がフラスコセキュリティの/ login_test/URLを使用してログインする方法です。

ありがとう

+0

まず、メインアプリでルートをどのように定義したかを明確にすることができます。末尾にスラッシュを付けるかどうかを指定します。フラスコはそれがルーティング機構であるとみなします。 – Mekicha

+0

@ Mekicha私はフラスコのセキュリティが私のためにそれを行うので、ログインのために私自身のビューを作成する必要はありません。私がしなければならなかったのは、設定ファイルにログインエンドポイントを設定することでした。私は/ login_test/ – Jessi

+0

として設定しました。あなたはどんな応答を得ていますか? – Mekicha

答えて

0

[OK]をクリックします。私がHTTP 400エラーの詳細の代わりにHTTP 400エラーだけを見ている理由は、Flaskアプリケーションにエラー処理を入れて、実際のエラーではなく400を表示したためです。 HTTP 400のエラー処理を取り除くと、CSRFトークンが失われていると言われました。だから、私がしたのは、WTF_CSRF_ENABLED =アプリケーション設定ファイルのFalseです。