2017-10-18 41 views
0

我試圖測試我寫的一個CKAN擴展。基本上我想測試給定某些參數的函數,成功查詢數據庫並返回正確的數據。但是我得到這個錯誤:CKAN - 在測試文件中綁定會話到數據庫

UnboundExecutionError:找不到上映射器映射配置綁定|用戶|用戶,SQL表達式或本屆

這裏的測試: 導入單元測試 從ckanext。匹配進口插件

class MatcherPluginTest(unittest.TestCase): 

def setUp(self): 
    # Create instances 
    self.plugin_instance = plugin.MatcherPlugin() 

def test_func_call(self): 
    user_account = ’testUser' 
    user_ckan = self.plugin_instance.get_ckanuser(user_account) 
    self.assertEqual(user_ckan['display_name'], 'Shani Agent') 

if __name__ == '__main__': 
    unittest.main() 

從我研究這個錯誤是因爲沒有附着或綁定到一個數據庫中的會話變量的結果。所以我試圖創建一個會話如下,但我仍然得到同樣的錯誤如上:

def setUp(self): 
     self.plugin_instance = plugin.MatcherPlugin() 
     self.engine = create_engine('postgresql://...') 
     self.Session = sessionmaker(bind=self.engine) 
     self.session = self.Session() 
    def test_func_call(self): 
     user_account = ’testUser' 
     user_ckan = self.session.add(self.plugin_instance.get_ckanuser(user_account)) 
     self.session.commit() 
     self.assertEqual(user_ckan['display_name'], 'Shani Agent') 

這裏的get_ckanuser功能,即是所謂的test_func_call測試:

def get_ckanuser(self, user): 
     import ckan.model 

     user_ckan = ckan.model.User.by_name(user) 

     # If the user exists, return user dictionary, else, return None 
     if user_ckan: 
      user_dict = toolkit.get_action('user_show')(data_dict={'id': user_ckan.id}) 
      return user_dict 
     else: 
      return None 

有沒有一種辦法將會話綁定到測試文件中的數據庫?

回答

0

數據庫會話和普通的Pylons必需品由nosetests Pylons插件設置。所以你需要使用nosetests並使用它的--with-pylons=../ckan/test-core.ini參數。

這種情況的文檔是在這裏:其他http://docs.ckan.org/en/latest/contributing/test.html#run-the-tests

一兩件事,這是沒有必要改變,但與nosetests編寫測試的首選樣式略有不同。您可以在主要的CKAN代碼庫中找到示例測試,或者例如:https://github.com/datagovuk/ckanext-dgu/blob/master/ckanext/dgu/tests/functional/test_api.py