2011-11-11 72 views
2

測試仍寫入我的MySQL數據庫,而不是一個SQLite臨時文件數據庫。爲什麼會發生?謝謝!當我指定了時,爲什麼我的燒瓶單元測試不使用tempfile數據庫?

這裏是我的代碼:

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.db, self.app.config["DATABASE"] = tempfile.mkstemp() 

printself.dbself.app.config["DATABASE"]的價值觀,並確保他們是你期望的是什麼。

0

您可能想要調查您的配置self.app.config["DATABASE"]在您的數據庫代碼中被引用的位置。

當第一次導入模塊時,Flask示例代碼通常會做很多工作。當您嘗試在運行時動態更改值時,這往往會破壞事情,因爲那時候太遲了。

您可能需要使用application factory,因此您的應用程序不能在測試代碼運行之前構建。此外,應用程序工廠模式意味着您正在使用Blueprint interface而不是直接app參考,該參考在示例代碼中使用circular import獲取。

相關問題