ValueError:View函数未返回响应

时间:2015-03-02 11:19:41

标签: python flask flask-testing

我尝试测试我的烧瓶应用的编辑路线但是得到这个错误我认为这个错误通常是因为返回,即使我在编辑路线中有一个返回我怎么能修复这个错误谢谢? 错误:

  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)

1 个答案:

答案 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)