我尝试测试我的烧瓶应用的编辑路线但是得到这个错误我认为这个错误通常是因为返回,即使我在编辑路线中有一个返回我怎么能修复这个错误谢谢? 错误:
File "/home/peg/flask-Alembic/test/test_app.py", line 59, in test_monkey_edit
response = self.client.get('/edit/1', follow_redirects=True)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/test.py", line 762, in get
return self.open(*args, **kw)
response = self.run_wsgi_app(environ, buffered=buffered)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/test.py", line 855, in run_wsgi_app
app_iter = app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request
response = self.make_response(rv)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1566, in make_response
raise ValueError('View function did not return a response')
ValueError: View function did not return a response
view.py:
@layout.route('/edit/<int:id>', methods=['GET','POST'])
def edit(id=None):
user = Users.query.get_or_404(id)
form = LoginForm(obj=user)
if request.method=='POST':
if form.validate_on_submit()== True:
form.populate_obj(user)
db.session.commit()
flash("You have been updated the profile")
return redirect(url_for('layout.user',page=1,sortby='normal'))
else: #If the form does not have all fields that are required
return render_template('edit.html', form=form, id=id )
test.py:
def test_edit(self):
u = Users(name='user1', email='user1@gmail.com', age=25)
db.session.add(u)
db.session.commit()
data = dict(name='admin', email='adminu@gmail.com', age=28)
db.session.commit()
response = self.client.get('/edit/1', follow_redirects=True)
self.assertTrue('You have been edit the profile', response.data)
答案 0 :(得分:1)
您测试了get
个请求,但在您的视图中,您仅对post
做出回复:
if request.method=='POST':
if form.validate_on_submit()== True:
... # form valid logic
return redirect(url_for('layout.user',page=1,sortby='normal'))
else: # invalid post form logic
return render_template('edit.html', form=form, id=id )
return render_template('home.html) # get logic
如果您想测试post
请求,请使用帖子功能:self.client.post(url, data)
实施例
def view_code():
if request.method=='POST':
if form.validate_on_submit()== True:
user.name = form.user_name
user.age = form.age
user.email = form.email
db.commit()
... # other form valid logic
def test_edit(self):
response = self.client.post('/edit/1', data={'user_name': 'admin', age='28', email='adminu@gmail.net')
self.assertTrue('You have been edit the profile', response.data)