如何在 Flask 中测试 u=g.user
how can test u=g.user in Flask
假设我有烧瓶应用程序现在我想测试 u=g.user.be_friend(user) 如果他们之前不是朋友,它可以让用户彼此成为朋友但我不知道如何测试g.user 最重要的是 g.user.be_friend 你能帮帮我吗?
view.py:
user = Users.query.filter_by(name = name).first()
if user is None:
flash('User %s not found.' % name)
return redirect(url_for('layout.user'))
if user == g.user:
flash('You can\'t Friend yourself!')
return redirect(url_for('layout.user',page=1, sortby='normal'))
u = g.user.be_friend(user)
mytest_app.py:
def test_friend_main(self):
e1 = Users(name='admine1', email='admine2@gmail.com', age=25)
e2 = Users(name='teste2', email='teste2@gmail.com', age=27)
db.session.add_all([e1, e2])
db.session.commit()
with self.client:
self.assertTrue(g.user =='admine1')
e1.be_friend(e2)
response=self.client.get('/friend/admine1', follow_redirects=True)
self.assertTrue('You are now Friend with !',response.data)
您需要 flask-login
模块。
from flask.ext.login import current_user
@lm.user_loader # you should have same function
def load_user(user_id):
return User.get_user(user_id)
@flask_app.before_request
def before_request():
g.user = current_user # save current user in request context.
遗憾的是,我没有找到任何简单的方法来获取测试代码中的当前 g
值。 test_request_context 的唯一困难。无论如何,你可以测试 current_user
,如果它传递给模板:
def test_something(self)
self.assertEqual(self.get_context_variable('current_user').name, name_should_be)
但首先,您应该登录:
response = self.client.post('/login', data=dict(name='admine1', email='admine2@gmail.com'))
User
模型可改进:class User(UserMixin, db.Model):
此外,在测试中你不应该直接执行e1.be_friend(e2)
。您应该从生产代码中执行它。
我已经为我在书中介绍的 Flasky 应用程序的 "followers" 功能实施了单元测试。这是测试,你可能会从中得到一些想法:
def test_follows(self):
u1 = User(email='john@example.com', password='cat')
u2 = User(email='susan@example.org', password='dog')
db.session.add(u1)
db.session.add(u2)
db.session.commit()
self.assertFalse(u1.is_following(u2))
self.assertFalse(u1.is_followed_by(u2))
timestamp_before = datetime.utcnow()
u1.follow(u2)
db.session.add(u1)
db.session.commit()
timestamp_after = datetime.utcnow()
self.assertTrue(u1.is_following(u2))
self.assertFalse(u1.is_followed_by(u2))
self.assertTrue(u2.is_followed_by(u1))
self.assertTrue(u1.followed.count() == 2)
self.assertTrue(u2.followers.count() == 2)
f = u1.followed.all()[-1]
self.assertTrue(f.followed == u2)
self.assertTrue(timestamp_before <= f.timestamp <= timestamp_after)
f = u2.followers.all()[-1]
self.assertTrue(f.follower == u1)
u1.unfollow(u2)
db.session.add(u1)
db.session.commit()
self.assertTrue(u1.followed.count() == 1)
self.assertTrue(u2.followers.count() == 1)
self.assertTrue(Follow.query.count() == 2)
u2.follow(u1)
db.session.add(u1)
db.session.add(u2)
db.session.commit()
db.session.delete(u2)
db.session.commit()
self.assertTrue(Follow.query.count() == 1)
当您查看此代码时,请记住此应用程序让用户成为他们自己的关注者,因此例如,当一个用户刚刚关注另一个用户时,关注者计数是两个,而不是一个。
假设我有烧瓶应用程序现在我想测试 u=g.user.be_friend(user) 如果他们之前不是朋友,它可以让用户彼此成为朋友但我不知道如何测试g.user 最重要的是 g.user.be_friend 你能帮帮我吗?
view.py:
user = Users.query.filter_by(name = name).first()
if user is None:
flash('User %s not found.' % name)
return redirect(url_for('layout.user'))
if user == g.user:
flash('You can\'t Friend yourself!')
return redirect(url_for('layout.user',page=1, sortby='normal'))
u = g.user.be_friend(user)
mytest_app.py:
def test_friend_main(self):
e1 = Users(name='admine1', email='admine2@gmail.com', age=25)
e2 = Users(name='teste2', email='teste2@gmail.com', age=27)
db.session.add_all([e1, e2])
db.session.commit()
with self.client:
self.assertTrue(g.user =='admine1')
e1.be_friend(e2)
response=self.client.get('/friend/admine1', follow_redirects=True)
self.assertTrue('You are now Friend with !',response.data)
您需要 flask-login
模块。
from flask.ext.login import current_user
@lm.user_loader # you should have same function
def load_user(user_id):
return User.get_user(user_id)
@flask_app.before_request
def before_request():
g.user = current_user # save current user in request context.
遗憾的是,我没有找到任何简单的方法来获取测试代码中的当前 g
值。 test_request_context 的唯一困难。无论如何,你可以测试 current_user
,如果它传递给模板:
def test_something(self)
self.assertEqual(self.get_context_variable('current_user').name, name_should_be)
但首先,您应该登录:
response = self.client.post('/login', data=dict(name='admine1', email='admine2@gmail.com'))
User
模型可改进:class User(UserMixin, db.Model):
此外,在测试中你不应该直接执行e1.be_friend(e2)
。您应该从生产代码中执行它。
我已经为我在书中介绍的 Flasky 应用程序的 "followers" 功能实施了单元测试。这是测试,你可能会从中得到一些想法:
def test_follows(self):
u1 = User(email='john@example.com', password='cat')
u2 = User(email='susan@example.org', password='dog')
db.session.add(u1)
db.session.add(u2)
db.session.commit()
self.assertFalse(u1.is_following(u2))
self.assertFalse(u1.is_followed_by(u2))
timestamp_before = datetime.utcnow()
u1.follow(u2)
db.session.add(u1)
db.session.commit()
timestamp_after = datetime.utcnow()
self.assertTrue(u1.is_following(u2))
self.assertFalse(u1.is_followed_by(u2))
self.assertTrue(u2.is_followed_by(u1))
self.assertTrue(u1.followed.count() == 2)
self.assertTrue(u2.followers.count() == 2)
f = u1.followed.all()[-1]
self.assertTrue(f.followed == u2)
self.assertTrue(timestamp_before <= f.timestamp <= timestamp_after)
f = u2.followers.all()[-1]
self.assertTrue(f.follower == u1)
u1.unfollow(u2)
db.session.add(u1)
db.session.commit()
self.assertTrue(u1.followed.count() == 1)
self.assertTrue(u2.followers.count() == 1)
self.assertTrue(Follow.query.count() == 2)
u2.follow(u1)
db.session.add(u1)
db.session.add(u2)
db.session.commit()
db.session.delete(u2)
db.session.commit()
self.assertTrue(Follow.query.count() == 1)
当您查看此代码时,请记住此应用程序让用户成为他们自己的关注者,因此例如,当一个用户刚刚关注另一个用户时,关注者计数是两个,而不是一个。