gpt4 book ai didi

python - 单元测试 Flask 功能(使用登录用户)

转载 作者:行者123 更新时间:2023-12-01 05:41:34 24 4
gpt4 key购买 nike

我是 Python 和 Flask 的新手,但我正在逐渐掌握它。到目前为止,我已经构建了一个应用程序,现在我想我应该开始一些单元测试。但我真的无法理解它。我已经阅读了各种文档、帖子和示例,但我似乎无法将其转移到我自己的代码中。我希望如果有人能告诉我如何为我的一个函数编写测试,那么事情就会水到渠成。在这个阶段,很容易忽略它并继续构建我的应用程序。

@app.route('/user/<nickname>/create_bike', methods = ['GET', 'POST'] )
@login_required
def create_bike(nickname):
user = User.query.filter_by(nickname = nickname).first()
bikes = user.bikes.all()
bikecount = user.bikes.count()
form = CreateBike()
if form.validate_on_submit():
if bikecount < user.bike_allowance:
# let user create a bike
newbike = Bikes(bikename = form.bikename.data,
user_id = g.user.id, shared = SHARED )
db.session.add(newbike)
db.session.commit()
flash('Your new bike has been created')
return redirect(url_for('create_bike', nickname = nickname))
else:
flash("You have too many bikes")
return render_template('create_bike.html',
user = user,
form = form
)

更新 - 这是我的工作测试

def test_create_bike(self):
u = User(nickname = 'john', email = 'john@example.com', account_type = "tester")
db.session.add(u)
db.session.commit()
# login user
with self.app as c:
with c.session_transaction() as sess:
sess['user_id'] = int(u.get_id())
# http://pythonhosted.org/Flask-Login/#fresh-logins
sess['_fresh'] = True
rv = c.post('/user/john/create_bike', data = dict(
bikename = 'your new bike',
user_id = sess['user_id'],
shared = 1
), follow_redirects = True)
assert 'Your new bike has been created' in rv.data

最佳答案

您的测试可能会失败,因为该 View 需要登录用户,并且由于您没有传递任何 session 数据,因此您将被重定向到登录页面(data 参数) .post 是表单数据,在您的 View 中的 request.form 中可用)。在做出断言之前,您可以看到响应是什么来帮助您:

print rv.status_code
print rv.location #None if not a redirect

有一些关于测试中 session 的文档 here ,如果您像看起来一样使用 Flask-Login,this answer向您展示如何设置 session 以便您获得登录用户

关于python - 单元测试 Flask 功能(使用登录用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17404573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com