我正在使用pytest和werkzeug客户端在flask应用程序上测试表单提交。两者都是新手。我的测试之一是检查提交的缺少必填字段的表单将再次显示该表单,并在表单字段下插入一个错误。
但是response.data
中返回的HTML缺少<form>
标记内的html,因此测试失败,因为未找到错误文本。即使当我使用浏览器(本人)执行相同的测试时,错误消息也明显位于页面源中。
这是我的考试不及格:
def test_form_error(client):
response = client.post(
'/test_form',
headers={'Content-Type': 'application/x-www-form-urlencoded'},
data={ 'firstname': 'Ned', 'email': '' },
follow_redirects=True,
)
pprint(response)
assert b'E-Mail is required' in response.data
这是我运行pprint
时的pytest -s
的输出(注意表单字段丢失):
'<div class="form"> \n'
'<form action="/test_form" method="post">\n'
' \n'
' \n'
'\n'
'</form>\n'
' </div>\n'
'\n'
这里是浏览器源中返回的html(注意此处有字段):
<div class="form">
<form action="/test_form" method="post">
<label for="firstname">First Name</label>
<input id="firstname" name="firstname" type="text">
<label for="email">E-Mail</label>
<input id="email" name="email" type="email">
<div class="invalid-feedback">E-Mail is required</div>
<input type="submit" value="Submit">
</form>
</div>
想通了。我是应用程序工厂的受害者。我没有在我的测试应用程序实例中启动flask-bootstrap-它可以处理表单呈现。