【问题标题】:ValueError: View function did not return a response [duplicate]ValueError:查看函数没有返回响应[重复]
【发布时间】:2015-03-02 11:19:40
【问题描述】:

我尝试测试我的烧瓶应用程序的编辑路径但是得到这个错误我认为这个错误通常是因为返回即使我的编辑路径中有一个返回我如何修复这个错误谢谢? 错误:

  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)

【问题讨论】:

    标签: python flask flask-testing


    【解决方案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请求你应该使用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)
    

    【讨论】:

    • thanx 它解决了错误,但仍然没有覆盖 flash self.assertTrue('You have been edit profile', response.data) 你知道我该怎么做吗thanx @Jimilian
    • @LiLi,你不明白如何测试代码。您不应该在测试代码中使用 db 函数,您应该使用新数据创建正确的 post 请求并发布它。
    • @LiLi,我添加了一些信息,也许对你有帮助。