ImportError:没有名为app的模块 - 尝试运行单元测试

时间:2017-02-27 15:53:23

标签: python unit-testing flask

所以我有一个像这样的文件夹结构。

└── myApp
    ├── app
    │   ├── __init__.py
    │   ├── core
    │   ├── db.py
    │   ├── schema.sql
    │   ├── static
    │   │   ├── fonts
    │   │   ├── images
    │   │   ├── js
    │   │   └── resources
    │   ├── templates
    │   ├── tests
    │   │   └── tests.py
    │   ├── utils.py
    │   ├── views.py
    │   ├── con.py
    ├── config.py
    ├── manifest.json
    ├── run.py
    ├── deps
    ├── store

正如您所看到的,我的tests.py位于app / tests文件夹中。

app = Flask(__name__) init .py中声明,但每当我尝试运行我的测试时,我的文件夹(我在myApp目录中这样做:python app / tests / tests.py)我得到了ImportError: No module named app

我不确定这些信息是否相关,运行应用程序我通常运行run.py,其中包含app.run(debug = True, host='0.0.0.0')

感谢。

tests.py:

import os
import unittest
from app import app

class TestCase(unittest.TestCase):

    def setUp(self):
        self.db_fd, app.config['DATABASE'] = tempfile.mkstemp()
        self.app = app.test_client()

    def tearDown(self):
        os.unlink(app.config['DATABASE'])

    def test_empty_db(self):
        rv = self.app.get('/index')
        assert b'No entries here so far' in rv.data

if __name__ == "__main__":
    unittest.main()

2 个答案:

答案 0 :(得分:1)

是否可能是因为tests.py位于app内?意思是python找不到app,因为他没有查看这个目录之上的目录。

import os.path
import sys
newPath = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir))
sys.path.append(newPath)
from app import app
sys.path.remove(newPath)
del newPath

这是一种非常难看的方式来添加python查找导入的路径。这个例子有两个目录,它应该把它带到myApp目录。

如果出现此问题,您还可以考虑将tests目录移至myApp文件夹或其他位置。但我不是python包装/ app礼仪的专家。可能会考虑查找

答案 1 :(得分:0)

您可以通过键入sys.path来查看是否已设置模块的路径。如果没有,你必须设置它,例如在单元测试的文件中使用类似的东西:

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), 'app'))