我正在研究我的烧瓶项目中的单元测试。我的测试文件如下:
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.我想这是因为self出于某种原因实际上并不是我的应用程序?当我运行应用程序时,根地址肯定会返回index.html。
我设置create_app
错了吗?任何帮助表示赞赏。
答案 0 :(得分:1)
在setUp函数中,您需要提供一个测试客户端来发出请求。尝试这样的事情。
def setUp(self):
# this test client is what flask-testing will use to make your requests
self.app = app.test_client()
查看此信息以获取更多信息How to Test a Flask Application。
答案 1 :(得分:0)
您需要在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()
函数中创建测试客户端。你在帖子中错过了那个部分,但我想你是在代码中的其他地方做的。