我现在正在我的烧瓶项目中设置单元测试。我的测试文件如下:
import flask_testing
import unittest
from flask import Flask
from flask_testing import TestCase
class MyTest(TestCase):
def setUp(self):
pass # Executed before each test
def tearDown(self):
pass # Executed after each test
def create_app(self):
app = Flask(__name__)
# app.config['TESTING'] = True
return app
def test_greeting(self):
response = self.client.get('/')
print("should return 404 on landing page")
self.assertTemplateUsed('index.html')
self.assertEqual(response.status_code, 200)
if __name__ == '__main__':
unittest.main()
当我运行这些测试时,assertTemplateUsed
不返回模板,response.status_code
为404。我想这是因为出于某种原因,自我实际上不是我的应用程序吗?当我运行应用程序时,根地址肯定会返回index.html.
我设置create_app
是否错误?感谢您的帮助。
您需要在setUp()
函数中创建Flask应用程序实例。目前根本没有调用create_app()
函数。
更改您的代码如下:
import flask_testing
import unittest
from flask import Flask
from flask_testing import TestCase
class MyTest(TestCase):
def setUp(self):
self.app = Flask(__name__)
self.app_context = self.app.app_context()
self.app_context.push()
self.client = self.app.test_client(use_cookie=True)
def tearDown(self):
self.app_context.pop()
def test_greeting(self):
response = self.client.get('/')
print("should return 404 on landing page")
self.assertTemplateUsed('index.html')
self.assertEqual(response.status_code, 200)
if __name__ == '__main__':
unittest.main()
setUp()
函数在每个测试函数之前被调用。首先,您将创建一个Flask应用程序的新实例。如果您想访问应用程序上下文中的项目,最好将其推送到setUp()
函数中,然后将其弹出到tearDown()
函数中。如果您不从测试函数访问app_context项(如数据库会话对象),则可以忽略此项。最后,您需要在setUp()
函数中创建测试客户端。你在帖子中错过了这一部分,但我猜你在代码中的其他地方做了。
在您的setUp函数中,您需要提供一个测试客户端来发出请求。试试这样的东西。
def setUp(self):
# this test client is what flask-testing will use to make your requests
self.app = app.test_client()
有关如何测试烧瓶应用程序的更多信息,请查看此信息。