我从Github 克隆了烧瓶应用程序,并尝试按照Testing Flask Applications教程进行操作.以下奖励:测试应用程序,我已经test
在顶级flaskr
目录中添加了一个子目录,因此我的目录树如下所示:
. ??? build ? ??? bdist.linux-x86_64 ? ??? lib.linux-x86_64-2.7 ? ??? flaskr ? ??? flaskr.py ? ??? __init__.py ? ??? schema.sql ? ??? static ? ? ??? style.css ? ??? templates ? ??? layout.html ? ??? login.html ? ??? show_entries.html ??? dist ? ??? flaskr-0.0.0-py2.7.egg ??? flaskr ? ??? flaskr.db ? ??? flaskr.py ? ??? flaskr.pyc ? ??? __init__.py ? ??? __init__.pyc ? ??? schema.sql ? ??? static ? ? ??? style.css ? ??? templates ? ??? layout.html ? ??? login.html ? ??? show_entries.html ??? flaskr.egg-info ? ??? dependency_links.txt ? ??? PKG-INFO ? ??? requires.txt ? ??? SOURCES.txt ? ??? top_level.txt ??? MANIFEST.in ??? README ??? setup.cfg ??? setup.py ??? test ? ??? test_flaskr.py ??? tests ??? test_flaskr.py
请注意,目录中还有"内置"测试tests
; 但是,我正在test_flaskr.py
目录中编写测试tests
.到目前为止,我只尝试了一个测试:
import os import flaskr import unittest import tempfile class FlaskrTestCase(unittest.TestCase): def setUp(self): self.db_fd, flaskr.app.config['DATABASE'] = tempfile.mkstemp() flaskr.app.config['TESTING'] = True self.app = flaskr.app.test_client() with flaskr.app.app_context(): flaskr.init_db() def tearDown(self): os.close(self.db_fd) os.unlink(flaskr.app.config['DATABASE']) def test_empty_db(self): rv = self.app.get('/') assert b'No entries here so far' in rv.data if __name__ == '__main__': unittest.main()
但是,如果我尝试运行此操作,则会出现以下错误:
Traceback (most recent call last): File "/home/kurt/dev/scratch/flask/examples/flaskr/test/test_flaskr.py", line 13, in setUp flaskr.init_db() AttributeError: 'module' object has no attribute 'init_db'
我不明白这个错误.我和https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.pyflaskr.py
上的相同,并且定义了一个函数.如何进行单元测试?init_db
flaskr
在脚本中导入包时,可以访问声明和定义的变量,函数等flaskr/__init__.py
init_db
未定义flask/__init__.py
,提供的代码,期望init_db
在中定义flask/__init__.py
.
有两种方法可以解决您遇到的问题:
替换flaskr.init_db()
为flaskr.flaskr.init_db()
修改import语句test_flaskr.py
如下:
更改import flaskr
到from flaskr import flaskr