2016-05-19 5 views
3

私はthis tutorialのフラスコを学んできました。今、私はpython unittestを使ってアプリケーションのいくつかの部分をテストしようとしています。しかし、私はどのようにユーザーログインをテストするのか把握できません。フラスコのアプリケーションでログイン(MySQLを使用している)をテストするには?

from intro_to_flask import app 
from models import db 
from models import User 

class BaseTestCase(unittest.TestCase): 

def setUp(self): 
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://credentials/database' 
    app.config['TESTING'] = True 
    app.config['CSRF_ENABLED'] = False 
    with app.app_context(): 
     db.create_all() 


def tearDown(self): 
    with app.app_context(): 
     db.session.remove() 
     db.drop_all() 

def test_User_login(self): 
    tester = app.test_client(self) 
    u = User(firstname = 'testname', lastname = 'testlaname', email = '[email protected]', password = 'pass') 
    with app.app_context(): 
     db.session.add(u) 
     db.session.commit() 
    response = tester.post('/signin', data=dict(email = '[email protected]', password = 'pass'), follow_redirects=True) 
    self.assertIn(b'Profile', response.data) #User is redirected to profile page after loggin in which has giant Profile 

if __name__ == '__main__': 
    unittest.main() 

テストが失敗し、そのログインと次のリダイレクトは行われません。

I試験に次の印刷のステートメントを追加:

プリント(応答)以下の結果生成 プリント(response.data)

プリント(応答)

<Response streamed [200 OK]> 

print(response.data)

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Flask App</title> 
    <link rel="stylesheet" href="/static/css/main.css"> 
    </head> 
    <body> 

    <header> 
    <div class="container"> 
     <h1 class="logo">Image Hosting Test v 0.2</h1> 
     <nav> 
     <ul class="menu"> 
      <li><a href="/">Home</a></li> 
      <li><a href="/about">About</a></li> 
      <li><a href="/contact">Contact</a></li> 

      <li><a href="/signup">Sign Up</a></li> 
      <li><a href="/signin">Sign In</a></li> 

     </ul> 
     </nav> 
    </div> 
    </header> 

    <div class="container"> 

    <h2>Sign In</h2> 





    <form action="/signin" method=post> 
    <div style="display:none;"><input id="csrf_token" name="csrf_token" type="hidden" value="1463805648##fcc7e953937a80b6744554aed86d092fcf70e1fb"></div> 

    <label for="email">Email</label> 
    <input id="email" name="email" type="text" value="[email protected]"> 

    <label for="password">Password</label> 
    <input id="password" name="password" type="password" value=""> 

    <input id="submit" name="submit" type="submit" value="Sign In"> 
    </form> 


    </div> 

    </body> 
</html> 

私のテストで間違っていることを誰かに説明することはできますか?

Pythonのバージョン:2.7.9 MySQLバージョン:5.7 フラスコバージョン:0.10.1 OSのWindows 10

+0

これは妥当と思われます。テストにprintステートメントを入れて、応答が何であるか確認できますか? – reptilicus

+0

プリントを追加しました。それはリダイレクトに従っていないようですね? –

+0

ああ、私はそれが原因でCSRFの保護だと思う。 'WTF_CSRF_PROTECT = False'を設定して無効にしてください – reptilicus

答えて

1

ああ、私はそれを引き起こしていることCSRFの保護だと思います。無効にしてください。

app.config['WTF_CSRF_ENABLED'] = False 
関連する問題