2017-10-18 44 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