2017-02-27 4 views
0

そうですね、私はそういうフォルダ構造を持っています。ImportError:モジュールはありません - ユニットテストを実行しようとしています

└── 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アプリ/テスト/ 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() 
+0

私はどこでもtests.pyをインポートしたくありません。私はそれを自分自身で実行したい。編集:誰でも私は彼らのコメントを削除するために返信していた。 –

答えて

1

それはtests.pyapp内にあるので、これは可能ですか?つまり、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がインポートを検索する場所にパスを追加するための非常に醜い方法です。この例では、ディレクトリを2つ上にして、myAppディレクトリに移動します。

これが問題の場合は、testsディレクトリをmyAppフォルダまたは他の場所に移動することを検討することもできます。しかし、私はPythonパッケージング/アプリのエチケットに関する専門家ではありません。それを見てみるといいかもしれません。

0

sys.pathと入力すると、モジュールへのパスがすでに設定されているかどうかを確認できます。そうでない場合は、設定する必要があります。ユニットテストのファイルで次のようになります:

import sys 
import os 
sys.path.append(os.path.join(os.path.dirname(__file__), 'app')) 
関連する問題