1

我是 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
4

2 回答 2

2

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

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

这里有一些关于测试会话的文档,如果您像看起来一样使用 Flask-Login,这个答案将向您展示如何设置会话以便获得登录用户

于 2013-07-01T14:16:18.983 回答
0

你在正确的轨道上。

检查 html 页面是否包含一些应该存在的数据是测试 Web 应用程序中最常见的场景之一。您只需要对您创建的所有其他页面重复。您还可以添加测试以查看创建用户是否遵循您设置的所有验证规则或用户名字段是唯一的等。

于 2013-07-01T12:44:35.160 回答