我正在尝试为某种将数据写入我的数据库的表格编写测试。 我不知道为什么它不起作用。
路线:
@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
答案 0 :(得分:0)
如果未在提交时验证表单,则new_session()
将返回render_template
,而200
将以status_code
的形式返回
您需要else
来检查表单是否未经验证。例如,可能有一个csrf令牌作为隐藏输入或其他任何内容,您必须显示表格错误才能知道原因。