Я использую pytest для проверки своего приложения Flask, и проверка на действительный вход в систему не удалась, потому что фальшивый пользователь не может войти в систему так, как я это делаю.
Как только пользователь вошел в систему, сервер должен перенаправить со страницы входа на домашнюю страницу, которая содержит текст и всплывающее сообщение. Мой тест не проходит утверждения для текстовых / вспыхнувших сообщений на домашней странице. Он передает утверждение для текста, который должен быть на странице входа, что означает, что он не входит в систему и, следовательно, не перенаправляет. Я также распечатал данные ответа, и он возвращает HTML для страницы входа. Это не проблема с самим приложением, так как на стороне сервера все работает нормально. Мой тест valid_login_logout в test_users.py и вход по маршруту в route.py ниже
def test_valid_login_logout(test_client, init_database):
"""
#GIVEN a Flask application
#WHEN the '/login' page is posted to (POST)
#THEN check the response is valid
"""
with test_client:
response = test_client.post('/login',
data={'username':'AW', 'password':'FlaskWhat'},
follow_redirects=True)
user = User.query.filter_by(username='AW').first()
assert user.check_password('FlaskWhat')
assert user in init_database.session
assert response.status_code == 200
#This is the point where it fails:
print(response.data)
assert b'Home' in response.data
assert b'Click to Reset It' in response.data
assert b'You were logged in' in response.data
assert b'Hello, AW!' in response.data
assert b"Here are available items on sale" in response.data
assert b"Welcome" in response.data
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if request.method == 'POST':
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash("Invalid username or password.")
return redirect(url_for('login'))
login_user(user, remember=form.remember_me.data)
flash('You were logged in')
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('index')
return redirect(next_page)
return render_template('login.html', title='Sign In', form=form)
Я хочу, чтобы данные ответов были перенаправленной домашней страницей, но вместо этого данные ответов являются исходной страницей входа, что означает, что фальшивый пользователь не входит в систему