2015-09-11 1 views
1

C'est la première fois que je développe Ruby on Rails, et j'utilise Neo4j pour une base de données. J'ai installé une version de test, créé des modèles représentant des nœuds, et écrit un test de base pour m'assurer que tout fonctionne. Le test est très simple: il récupère tous les utilisateurs et imprime leurs noms.Comment charger la base de données de test neo4j avec les données du fichier fixtures/yml?

Lorsque je me connecte directement à la base de données de test et que j'exécute des requêtes Cypher pour insérer des données, les tests trouvent les données et réagissent correctement. Cependant, lorsque je spécifie des données dans le fichier test/fixtures/users.yml, il ne se charge pas. Le test ne trouve que les données insérées manuellement. Voici le fichier yml:

one: 
    name: 'Dan' 
two: 
    name: 'Sam' 

Qu'est-ce que je fais mal? Y a-t-il un paramètre que je dois activer pour charger les données yml dans neo4j?

MISE À JOUR: Il semble que neo4j n'est pas compatible avec les appareils Rails, et pour cause: le langage est incapable de décrire les relations. Je suis en train de développer une nouvelle syntaxe étendue et une implémentation qui permettra d'utiliser les appareils pour tester les applications Rails utilisant neo4j.

Répondre

0

La prise en charge des appareils Rails n'a pas été prise en compte dans la gemme neo4j. C'est en fait une fonctionnalité ActiveRecord que nous n'avons pas encore mise en place. Pour commencer, je suggère de vérifier factory_girl:

https://github.com/thoughtbot/factory_girl

Il fournit beaucoup plus dynamique et plus facile à maintenir le système de définir les usines et la création d'objets dans vos tests. Bien sûr, cela signifie que vos tests seront plus lents car ils doivent effectuer les appels de base de données pour chaque test plutôt que de configurer les objets au début comme le font les appareils. Beaucoup de gens entrent dans une mentalité de «one way must be better» et disent que vous devez utiliser des appareils ou des usines. Je pense qu'il y a de la place pour les deux dans un projet. Les luminaires sont parfaits, surtout pour les objets que vous savez être toujours là. L'un des plus gros problèmes avec eux est que vous devez vous référer à vos fichiers de fixture lorsque vous travaillez sur vos tests.

Lors de votre modification, vous avez mentionné que les appareils ne prennent pas en charge les relations. Ce n'est pas exactement vrai. Les appareils ActiveRecord prennent en charge la définition de propriétés dans le YAML qui spécifient des valeurs pour les associations. Dans ActiveRecord, les associations sont gérées via des clés/tables de jointures étrangères, mais dans Neo4j, elles sont simplement effectuées par le biais de relations. Donc j'imagine que la même structure serait bien. Si vous cherchez à résoudre ce problème, je garderais quelques points à l'esprit:

Dans les installations ActiveRecord, vous pouvez spécifier directement la colonne de clé étrangère ou vous pouvez spécifier l'association via son nom et se référer à son identifiant, comme ceci :

### in pirates.yml 

reginald: 
    name: Reginald the Pirate 
    monkey_id: 123 
    # OR 
    monkey: george 

### in monkeys.yml 

george: 
    name: George the Monkey 

Avec accessoires ActiveRecord, ces identifiants sont effectivement hachés à un entier et cet entier est toujours utilisé pour l'ID de cet enregistrement dans la base de données. Cela facilite la définition des associations. Une solution de contournement similaire devrait probablement être faite pour neo4j.rb. Notez que les modèles ActiveNode possédaient une propriété uuid par défaut, ce qui pourrait peut-être être remplacé, mais vous souhaitiez vous assurer que vous n'affectiez pas les définitions personnalisées de l'utilisateur id_property.

+0

Je sais que ce plutôt beaucoup, donc si vous avez d'autres questions, ne hésitez pas à demander à notre chaîne Gitter: https://gitter.im/neo4jrb/neo4j –