首页 > 解决方案 > FlaskTest 字段列表表单

问题描述

我有表格:

class EntryForm(CsrfDissableForm):

    id = HiddenField()
    name = StringField(...)
    ...

class FooForm(FlaskForm):
    entries = FieldList(FormField(EntryForm))
    new_name = StringField(...)
    ...

在路线:

...
    while len(form.entries) > 0:
        form_entry = form.entries.pop_entry()
        save_changes(form_entry)
    new_inst = form.new_name.data
    save_new(new_inst)
...

我正在写一些测试(使用 Flask-Test)。我将“new_name”从发布数据保存到数据库,然后将其编辑为“名称”(输入表单):

def test_change_name(self):
    with self.client:
        self.client.post(url, data={'new_name': 'Foo'})
        foo = db.get_last_foo()
        self.assertEqual(foo.name, 'Foo')
        self.client.post(url, data={'entries': [{'id': foo.id, name: 'foo1'}]})
        foo = db.get_by_id(foo.id)
        self.assertEqual(foo.name, 'Foo')

我在这个测试中得到错误:

TypeError: add_file() got an unexpected keyword argument 'id'.

如何正确测试来自表单字段列表的请求?我可以走错路线吗?

标签: unit-testingflaskflask-wtformsflask-testing

解决方案


您需要发布表单值,因为它们将由您的应用程序发布。所以,它看起来像 data={"entries-0-id": foo.id, "entries-0-name": "foo1"}

您可能还需要在测试中包含 csrf 或禁用 csrf。


推荐阅读