2017-01-12 7 views
6

flaskrアプリケーションをGithubからクローンしました。Testing Flask Applicationsチュートリアルに従っています。私のディレクトリツリーは次のように見えるようにBonus: Testing the Applicationに続いて、私は、トップレベルflaskrディレクトリにサブディレクトリ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の「ビルトイン」のテストもあるという。しかし、私はディレクトリteststest_flaskr.pyにテストを書いています。これまでのところ、私はただ一つのテストしようとしている:私はこれを実行しようとした場合

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' 

私はこのエラーを理解していません。私のflaskr.pyは、https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.pyのものと同じであり、init_db関数が定義されています。単体テストを実行するにはどうすればよいですか?

答えて

11

あなたのスクリプトでflaskrパッケージをインポートすると、あなたは変数、関数などにアクセスすることができますが、宣言とflaskr/__init__.py

init_dbで定義されてflask/__init__.pyで定義されていない、提供されたコードは、init_dbflask/__init__.pyで定義されることを想定。 import flaskrfrom flaskr import flaskrをする

変更を:

  1. 次のようにtest_flaskr.pyにimport文を変更しflaskr.flaskr.init_db()

  2. flaskr.init_db()を交換してください:あなたが持っている問題を修正するには、2つの方法があります

関連する問題