2

如何使用 Flask-flask_testing 和 flask_wtf 包在 post 请求中发送表单数据?

这是我的 FlaskForm 模型和测试函数:

class BusinessTripProcessingForm(FlaskForm):
    departure_time = DateTimeField('Exact departure date and time')
    return_time = DateTimeField('Exact return date and time')

class TestBusinessTrip(TestCase):

def create_app(self):

    self.app = create_app('testing')

    self.client = self.app.test_client(self)
    return self.app

def setUp(self):

    loginmgr = LoginManager(app)
    loginmgr.init_app(app)
    # setup before executing the test

def tearDown(self):
    db.session.remove()

@unittest.mock.patch('flask_login.utils._get_user')
def test_business_trip_request_processing(self, current_user):
    mock_current_user = current_user
    mock_current_user.is_authenticated = MagicMock(return_value=True)
    mock_current_user.return_value.role.name = 'Administrator'
    mock_current_user.return_value.email = 'admin@email.com'
    mock_current_user.return_value.id = 1

    btr = BusinessTripRequest(user_id=1, start_date='2021-01-08', end_date='2021-10-08')
    DBSession.commit_to_db(btr)
    btr = BusinessTripRequest(user_id=2, start_date='2021-08-15', end_date='2021-08-22')
    DBSession.commit_to_db(btr)

    data = dict(departure_time='2021-01-08 15:00', return_time='2021-10-08 14:10')

    response = self.client.post('/business_trip_request_processing/1',
                                    data=data)
    self.assertEqual(response.status_code, 302)

这是我的路线的一部分:

@main.route('/business_trip_request_processing/<request_id>', methods=['GET', 'POST'])
@login_required
def business_trip_request_processing(request_id):

    form = BusinessTripProcessingForm(data=request.form)
    print('BusinessTripProcessingForm form data')
    print(form.data)
    print('-------------------')
    print('request form data')
    print(request.form)
    print('-------------------')

路线的打印输出是:

'BusinessTripProcessingForm form data'
{'departure_time': None, 'return_time': None}
-------------------

'request form data'
ImmutableMultiDict([('departure_time', '2021-01-08 15:00'), ('return_time', '2021-10-08 14:10')])
-------------------

为什么 BusinessTripProcessingForm 看不到离开时间和返回时间的传递值?

此测试的测试配置是:

TESTING = True
LOGIN_DISABLED = False
DEBUG = True
WTF_CSRF_ENABLED = False
4

0 回答 0