2017-10-18 2 views
0

Je tente de tester une extension CKAN que j'ai écrite. Fondamentalement, je veux tester une fonction donnée certains paramètres, interroge avec succès la base de données et renvoie les données correctes. Cependant, je reçois cette erreur:CKAN - Liaison de la base de données au fichier de test

UnboundExecutionError: Impossible de trouver une liaison configurée sur Mapper Mapper | Utilisateur | utilisateur, expression SQL ou cette session

Voici le test: importation unittest de ckanext. import plugin 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() 

d'après mes recherches cette erreur à la suite d'une variable de session ne pas être attaché ou lié à une base de données. Donc, j'ai essayé de créer une session comme suit mais je reçois toujours la même erreur que ci-dessus:

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') 

Voici la fonction get_ckanuser, que l'on appelle dans le test 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 

est-il un moyen de lier la session à la base de données dans le fichier de test?

Répondre

0

La session de base de données et les nécessités générales de Pylons sont mises en place par le plugin nosetests Pylons. Vous devez donc utiliser nosetests et utiliser son paramètre --with-pylons=../ckan/test-core.ini.

Les docs en sont ici: http://docs.ckan.org/en/latest/contributing/test.html#run-the-tests

Une autre chose, ce n'est pas nécessaire de changer, mais avec nosetests le style préféré de l'écriture des tests est légèrement différent. Vous pouvez trouver des exemples de tests dans la base de code CKAN principale, ou par exemple ici: https://github.com/datagovuk/ckanext-dgu/blob/master/ckanext/dgu/tests/functional/test_api.py