如何让pytest正确提交烧瓶wtforms表格

时间:2020-05-22 16:40:30

标签: flask pytest flask-wtforms

我的一些测试反复失败,因此我以最短的测试为例

测试

    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是错误的,但我不知道问题是什么。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我发现了问题。在我的setUp函数中,我设置了WTF_CSRF_ENABLE = False而不是WTF_CSRF_ENABLED = False。这意味着它正在寻找一个CSRF令牌,该令牌在测试包含wtforms的功能时不会提供。故事的寓意是不要使用vim /没有突出显示错误的编辑器