Flask 应用程序的测试覆盖率不起作用

Posted

技术标签:

【中文标题】Flask 应用程序的测试覆盖率不起作用【英文标题】:Test Coverage for Flask application doesnt work 【发布时间】:2015-04-24 13:20:17 【问题描述】:

您好,想在终端的烧瓶应用程序中测试“删除路线”,我可以看到测试已经过去,它说“test_user_delete (test_app.LayoutTestCase) ... ok” 但是当我打开封面时,它仍然是红色的,这意味着没有覆盖它,请您向我解释一下为什么以及我做错了什么?

app.layout.view.py

test.py

            e1 = Users(name='admine2', email='admine2@gmail.com', age=25)
            e2 = Users(name='teste2', email='teste2@gmail.com', age=27)
            db.session.add_all([e1, e2])
            db.session.commit()
            u = Users.query.get(1)
            db.session.remove()
            db.session.delete(u)
            response = self.client.post('/delete/1',
            follow_redirects=True)
            self.assertTrue('admine2 is removed!', response.data)

view.py:

 @layout.route('/delete/<int:id>')
   def delete(id):
    """remove monkey"""
    user = Users.query.get_or_404(id)
    db.session.delete(user)
    db.session.commit()
    flash("0 is removed!".format(user.name))
    return redirect(url_for("layout.user", page=1, sortby='normal'))

【问题讨论】:

尝试将self.assertTrue('delete done!', response.data) 更改为self.assertEqual('delete done!', response.data):现在您的self.assertTrue() 语句始终正确,您没有测试任何内容。我不是 Falsh 专家,但据我所知 flash() 消息没有回复,但您可以在其他地方找到。 thnx @Micheled'Amico 我收到了这个错误 AssertionError: 'delete done!' != '\n404 未找到\n

未找到

\n在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。\n'
这意味着您没有调用删除页面(正如报道所建议的那样)。首先测试response.code==200(我猜......)确保调用它和用户的测试数据库。 response = self.client.get(url_for('layout.delete%d'.format(e1.id) ')) self.assertEqual(response.status_code, 200) @Micheled'Amico I我也不是专家 :(( 应该是这样的? 看看flask.pocoo.org/docs/0.10/testing和***.com/questions/15278285/… 【参考方案1】:

我假设您的设置方法设置为app.config['Testing'] = True。否则 Flask-login 会将你重定向到你的登录视图。

编辑 但这似乎不是问题所在,因为您会收到 404 错误。如果需要登录,则问题将是未经授权的 - 401 错误。相反,我错误地认为您使用“DELETE”方法注册了您的函数,因此我提供的 url_for 语句是错误的。

您可以在密钥_flashes 下的会话中找到闪现的消息。你可以试试:

with self.client as c:
    rv = self.client.get(url_for('delete', id=e1.id), follow_redirects=True)
    print rv.data
    with c.session_transaction() as session:
        self.assertTrue("delete done !." in session['_flashes'])

您可能还想看看Flask Testing

【讨论】:

以上是关于Flask 应用程序的测试覆盖率不起作用的主要内容,如果未能解决你的问题,请参考以下文章

除了烧瓶应用程序的 url 之外,Flask 会话在另一个 url 中不起作用

gcovr 和 Xcode 5 的代码覆盖率不起作用

使用 JQuery 和 Flask 的动态下拉菜单不起作用

应用 jwt auth 包装器时,Flask-cors 包装器不起作用。

Python-Flask中的render_template不起作用

与 Google App Engine 和 Flask 一起使用时,Angular 路由不起作用