2011-11-11 1 views
2

このテストでは、引き続きsqlite tempfile dbではなく、MySQLデータベースに書き込みが行われます。なぜこれが起こるのですか?ありがとう!この行が問題かもしれません私のフラスコユニットテストで、指定したときに一時ファイルデータベースを使用しないのはなぜですか?

class UserTests(unittest.TestCase): 

    def setUp(self): 
     self.app = get_app() 
     #declare testing state 
     self.app.config["TESTING"] = True 
     self.db, self.app.config["DATABASE"] = tempfile.mkstemp() 
     #spawn test client 
     self.client = self.app.test_client() 
     #temp db 
     init_db() 

    def tearDown(self): 
     os.close(self.db) 
     os.unlink(self.app.config["DATABASE"]) 

    def test_save_user(self): 
     #create test user with 3 friends 
     app_xs_token = get_app_access_token(APP_ID, APP_SECRET) 
     test_user = create_test_user(APP_ID, app_xs_token) 
     friend_1 = create_test_user(APP_ID, app_xs_token) 
     friend_2 = create_test_user(APP_ID, app_xs_token) 
     friend_3 = create_test_user(APP_ID, app_xs_token) 
     make_friend_connection(test_user["id"], friend_1["id"], test_user["access_token"], friend_1["access_token"]) 
     make_friend_connection(test_user["id"], friend_2["id"], test_user["access_token"], friend_2["access_token"]) 
     make_friend_connection(test_user["id"], friend_3["id"], test_user["access_token"], friend_3["access_token"]) 

     save_user(test_user["access_token"]) 

答えて

1

は、ここに私のコードですself.dbself.app.config["DATABASE"]の値が出

self.db, self.app.config["DATABASE"] = tempfile.mkstemp() 

printと、彼らはあなたがそれらがあることを期待するものであることを確認します。

0

データベースコードでself.app.config["DATABASE"]の設定が参照されている場所を調べたいと思うかもしれません。

Flaskのサンプルコードは、通常、モジュールを最初にインポートするときに多くの作業を行います。これは実行時に値を動的に変更しようとすると、その時点では値が遅すぎるため、これを破る傾向があります。

おそらくapplication factoryを使用する必要があります。テストコードを実行する前にアプリが構築されていない可能性があります。また、アプリケーションファクトリパターンは、app参照の代わりにBlueprint interfaceという参照を使用していることを示しています。これは、コード例でcircular importを使用して取得したものです。

関連する問題