我正在尝试测试我编写的CKAN扩展。基本上,我想测试给定特定参数的函数是否成功地查询数据库并返回正确的数据。但是我得到了这个错误:
UnboundExecutionError:找不到在映射器mapper | User | User、SQL表达式或此会话上配置的绑定
下面是测试: 导入单元测试 从ckanext.matcher匹配器导入插件
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')
以下是在test_func_call
测试中调用的get_ckanuser
函数:
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
有没有办法将会话绑定到测试文件中的数据库?你知道吗
数据库会话和一般挂架必需品由nosetests挂架插件设置。所以您需要使用nosetests并使用它的
with-pylons=../ckan/test-core.ini
参数。你知道吗这些文档在这里:http://docs.ckan.org/en/latest/contributing/test.html#run-the-tests
还有一件事,没有必要改变,但是对于鼻测试,首选的测试写作风格略有不同。您可以在主CKAN代码库中找到示例测试,或者在这里找到示例:https://github.com/datagovuk/ckanext-dgu/blob/master/ckanext/dgu/tests/functional/test_api.py
相关问题 更多 >
编程相关推荐