Flask отправка формы теста - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь написать тест для какой-либо формы, которая записывает данные в мою базу данных. Я не знаю, почему это не работает.

route:

@admin.route('/session/new', methods=['POST', 'GET']) @login_required def new_session():
form = AddSession()
if form.validate_on_submit():
    print(form.name.data)
    print(request)
    add_session = Session(name=form.name.data,
                          start_date=form.start_date.data,
                          end_date=form.end_date.data)
    db.session.add(add_session)
    db.session.commit()
    flash('A session has been successfully added!', 'success')
    return redirect(url_for('admin.sessions_overview'))

return render_template('sessions/new_session.html', title='Add Session', form=form)

test:

class FlaskClientTestCase (unittest .TestCase):

def setUp(self):
    self.app = create_app('testing')
    self.app_context = self.app.app_context()
    self.app_context.push()
    db.create_all()
    populate_db(db)
    self.client = self.app.test_client(use_cookies=True)

def tearDown(self):
    db.session.remove()
    db.drop_all()
    self.app_context.pop()

def test_new_session(self):
    response = self.client.post('/login', data={
        'username': 'joshn',
        'password': '123'
    }, follow_redirects=True)
    self.assertEqual(response.status_code, 200)

    session_data = {
        'name': 'test_session',
        'start_date': date(2019, 7, 20),
        'end_date': date(2019, 7, 21)
    }
    response = self.client.post('/session/new', data={
        'name': 'test_session',
        'start_date': date(2019, 7, 20),
        'end_date': date(2019, 7, 21)
    })

    self.assertEqual(response.status_code, 200, "Form wasn't submitted")  # Checks the form submission was valid

    test_s = Session.query.filter_by(name='test_session').first()
    self.assertIsNotNone(test_s, "Session wasn't added to database")

    self.assertEqual(session_data['name'], test_s.name, "Data wasn't written properly to db")
    self.assertEqual(session_data['start_date'], test_s.start_date, "Data wasn't written properly to db")
    self.assertEqual(session_data['end_date'], test_s.end_date, "Data wasn't written properly to db")

сообщение об ошибке:

Трассировка (последний последний вызов): файл "tests / test_admin.py", строка 56, в test_new_session self.assertIsNotNone (test_s, «Сеанс не был добавлен в базу данных») AssertionError: неожиданно Нет: Сессия не была добавлена ​​в базу данных

РЕДАКТИРОВАТЬ: хорошо, я добавил еще один к маршруту, но теперь я получаю код ответа 400, и когда я проверяю, почтовый запрос был пуст.

Обновленный маршрут:

def new_session():
    form = AddSession()
    if form.validate_on_submit():
        print(form.name.data)
        print(request)
        add_session = Session(name=form.name.data,
                              start_date=form.start_date.data,
                              end_date=form.end_date.data)
        db.session.add(add_session)
        db.session.commit()
        flash('A session has been successfully added!', 'success')
        return redirect(url_for('admin.sessions_overview'))
    else:
        print(request.method)
        if request.method == 'POST':
            args = request.args
            print(args)
            add_session = Session(name=args['name'],
                                  start_date=args['start_date'],
                                  end_date=args['end_date'])
            db.session.add(add_session)
            db.session.commit()
            return Response(status=302)

    return render_template('sessions/new_session.html', title='Add Session', form=form)

Сообщение:

Traceback (most recent call last):
  File "tests/test_admin.py", line 53, in test_new_session
    self.assertEqual(response.status_code, 302, "Form wasn't submitted")  # Checks the form submission was valid
AssertionError: 400 != 302 : Form wasn't submitted

1 Ответ

0 голосов
/ 03 февраля 2020

Если форма не подтверждена при отправке, new_session() вернет render_template, который возвращает 200 как status_code

. Вам нужно else, чтобы проверить, когда форма не подтверждена. Например, может быть токен csrf в качестве скрытого ввода или что-то еще, и вам нужно отобразить ошибки формы, чтобы узнать причину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...