1

Python と Flask は初めてですが、徐々に慣れてきました。私はアプリの構築にこれまで取り組んできましたが、ユニットテストを開始する必要があると考えています。私は本当にそれを理解することはできません。さまざまなドキュメント、投稿、および例を読みましたが、これを自分のコードに転送できないようです。誰かが私の関数の 1 つのテストを作成する方法を教えてくれれば、うまくいくことを願っています。この段階では、それを無視してアプリの構築を進めるのは非常に魅力的です。

@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 に答える