烧瓶测试表格提交

时间:2020-02-03 18:36:08

标签: python flask

我正在尝试为某种将数据写入我的数据库的表格编写测试。 我不知道为什么它不起作用。

路线:

@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)

测试:

类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 :(得分:0)

如果未在提交时验证表单,则new_session()将返回render_template,而200将以status_code的形式返回

您需要else来检查表单是否未经验证。例如,可能有一个csrf令牌作为隐藏输入或其他任何内容,您必须显示表格错误才能知道原因。