2017-03-24 7 views
-1

私はフラスコプロジェクトで単体テストを準備中です。私のテストファイルは以下の通りです:フラスコのテストcreate_appはアプリケーションを返さないのですか?

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である私は、自己が実際に何らかの理由で私のアプリケーションではありませんので、これは想像これらのテストを実行すると?私は、アプリケーションを実行すると、ルートアドレスは絶対にindex.htmlを返します。

create_appは間違っていますか?どんな助けもありがとうございます。

答えて

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()機能でテストクライアントを作成する必要があります。あなたはあなたのポストでその部分を見逃していましたが、私はあなたのコードのどこかでそれをやったと思います。

+0

create_app()が確実に呼び出されています。それはFlask-Testingアプリケーションで必要です:https://pythonhosted.org/Flask-Testing/ Edit:フラスコテストを試して落として、単体テストを使用することもできます – Programmingjoe

0

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を参照してください。

関連する問題