我想添加单元测试到我的烧瓶应用程序,测试有效和无效登录+注册表单行为。目前,我有一个登录表单和一个登录表单,托管在一个页面和路由中,并使用隐藏的输入字段来标识提交的两个表单中的哪一个/确定下一个操作。如何在路由上有多个表单时单元测试表单提交?
我的问题是 - 我该如何编写一个针对页面上特定表单的单元测试?到目前为止,我所见过的所有例子都将数据发布到特定的路线,这是我目前正在做的。但那是失败的,因为我需要一个额外的方式来说“我们正在提交x表单”。
那么有没有办法在发布请求中添加“并且我们正在提交x表单”呢?
** 编辑添加,这里是我尝试传递隐藏的表单数据在数据字典中的不同方式,但没有成功。
data = dict(username="[email protected]", password="test", login_form)
data = dict(username="[email protected]", password="test", "login_form")
data = dict(username="[email protected]", password="test", login_form=True)
登录单元测试:在views.py
from app import app
import unittest
class FlaskTestCase(unittest.TestCase):
#ensure that login works with correct credentials
def test_correct_login(self):
tester = app.test_client(self)
response = tester.post(
'/login',
data = dict(username="[email protected]", password="test"),
follow_redirects=True
)
self.assertIn(b'you are logged in', response.data)
登录路由:
@app.route('/login', methods=['POST', 'GET'])
def login():
login_form = LoginForm()
signup_form = SignupForm()
error_login = ''
error_signup = ''
#login form
if 'login_form' in request.form and login_form.validate():
# do login form stuff
#signup form
if 'signup_form' in request.form and signup_form.validate():
# do signup form stuff
return render_template('login.html', login_form=login_form, signup_form=signup_form, error=error)
的login.html:
<div class="login-form form-400">
<h3>Log In To Your Account</h3>
<form action="" method="post">
<input type="hidden" name="login_form">
{% if error_login != '' %}
<label class="error">
{{ error_login }}
</label>
{% endif %}
{% from "_formhelper.html" import render_field %}
{{ login_form.hidden_tag() }}
{{ render_field(login_form.email, placeholder="Your Email", class="form-item__full", type="email") }}
{{ render_field(login_form.password, placeholder="Your Password", class="form-item__full") }}
<input type="submit" value="Login" class="button button-blue">
</form>
</div>
<p class="login-divider">or</p>
<div class="signup-form form-400">
<h3>Create a New Account</h3>
<form action="" method="post">
<input type="hidden" name="signup_form">
{% if error_signup != '' %}
<label class="error">
{{ error_signup | safe}}
</label>
{% endif %}
{% from "_formhelper.html" import render_field %}
{{ signup_form.hidden_tag() }}
{{ render_field(signup_form.username, placeholder="Pick a Username", class="form-item__full") }}
{{ render_field(signup_form.email, placeholder="Your Email", class="form-item__full", type="email") }}
{{ render_field(signup_form.password, placeholder="Create a Password", class="form-item__full") }}
<input type="submit" value="Sign Up" class="button button-green">
</form>
</div>
您需要执行以下两项操作之一。要么你需要在表单中包含一个具有唯一名称或值的输入,或者我推荐的方式,每个表单都应该发布到它自己的端点。 – dirn