Как можно проверить u=g.user во Flask

Допустим, у меня есть приложение фляги. Теперь я хочу протестировать u=g.user.be_friend(user), чтобы сделать друга другом с помощью eachother, если они раньше не были друзьями. Но я не знаю, как я могу протестировать 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)

2 ответа

Решение

Тебе нужно 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, которую я описал в своей книге. Вот тест, вы можете взять некоторые идеи из него:

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)

Когда вы смотрите на этот код, имейте в виду, что это приложение делает пользователей подписчиками самих себя, поэтому, например, число подписчиков, когда пользователь просто следует за другим пользователем, равно двум, а не одному.

Другие вопросы по тегам