我有一个烧瓶应用程序,它具有如下所示的视图功能:

@login_required
@app.route('/suspect_tracker/new_list', methods=['GET', 'POST'])
def new_list():
    form = ListForm()
    if form.validate_on_submit():
        if form.private:
            privacy_setting = 1
        else:
            privacy_setting = 0
        new_list = List(name=form.name.data, last_updated=datetime.utcnow(), user_id=g.user.id, private=privacy_setting)
        db.session.add(new_list)
        db.session.commit()
        flash('New list %s added' % new_list.name)
        return redirect('/suspect_tracker/' + form.name.data)
    else:
        flash(form.name.errors)

    return render_template('newlist.html', title="Make a new list!", form=form)

我试图为它编写测试,测试看起来像这样:

from config import basedir
from app import app, db
from app.models import User, List, Suspect, SuspectList
from flask import g
from flask_testing import TestCase

class TestViews(TestCase):
    def create_app(self):
        app.config['TESTING'] = True
        app.config['WTF_CSRF_ENABLED'] = False
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'test.db')
        self.client = app.test_client()

        return app

    def setUp(self):
        self.app = self.create_app()
        db.create_all()

        test_user = User(nickname="test")

        db.session.add(test_user)
        db.session.commit()

        g.user = User.query.filter_by(id=1).first()

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    def test_new_list_view(self):
        self.client.get('/suspect_tracker/new_list/')

        form = {'name':'Test', 'private':False}

        g.user = User.query.filter_by(id=1).first()

        self.client.post('/suspect_tracker/new_list', data=form)

        assert List.query.filter_by(name="Test").first() != None

运行测试后,断言失败,我已经测试过,在运行self.client.post之后,List没有包含新列表,并且仍然是空的 . 这让我相信form.validate_on_submit()返回false,这让我相信我没有在test_new_list_view()的self.client.post()函数中传递正确的数据 . 我的问题是,如何在测试函数中正确创建ListForm(),然后使用self.client.post()对其进行POST以测试new_list()函数?

我已经修复了正确发送表单数据的问题,所以现在表单验证但我不知道如何将g.user设置为模拟用户,因此当我尝试运行测试时,我得到一个“AttributeError: 'AnonymousUserMixin'对象没有属性'id'“错误 .