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
これは妥当と思われます。テストにprintステートメントを入れて、応答が何であるか確認できますか? – reptilicus
プリントを追加しました。それはリダイレクトに従っていないようですね? –
ああ、私はそれが原因でCSRFの保護だと思う。 'WTF_CSRF_PROTECT = False'を設定して無効にしてください – reptilicus