我的一些测试反复失败,因此我以最短的测试为例
测试
def test_delete_char(self):
with self.client:
start = characters.query.count() #num of entries in db
self.client.post(
url_for("delete", identity=1),
follow_redirects=True)
end = characters.query.count() #num of entries in db after deletion
self.assertTrue(start > end) #check if delete has gone through
路线
@app.route("/delete/<identity>", methods=["GET", "POST"])
def delete(identity):
form = DeleteForm()
if form.validate_on_submit():
char = characters.query.filter_by(id=identity).first()
db.session.delete(char)
db.session.commit()
return redirect(url_for("home"))
return render_template("delete.html", form=form, identity=identity, title="Delete")
在网站上手动运行此功能时,没有问题。使用pytest,我可以看到在delete函数中,如果form.validate_on_submit():它不会消失。我只能得出结论,我的self.client.post是错误的,但我不知道问题是什么。任何帮助将不胜感激
答案 0 :(得分:0)
我发现了问题。在我的setUp函数中,我设置了WTF_CSRF_ENABLE = False而不是WTF_CSRF_ENABLED = False。这意味着它正在寻找一个CSRF令牌,该令牌在测试包含wtforms的功能时不会提供。故事的寓意是不要使用vim /没有突出显示错误的编辑器