[英]How to load neo4j test database with data from fixtures/ yml file?
这是我第一次在Ruby on Rails中进行开发,并且正在将Neo4j用于数据库。 我已经安装了测试版本,创建了一些表示节点的模型,并编写了基本测试以确保一切正常。 该测试非常简单:它将获取所有用户并打印其名称。
当我直接连接到测试数据库并执行Cypher查询以插入数据时,测试会找到数据并对其做出正确的反应。 但是,当我在test / fixtures / users.yml文件中指定数据时,不会加载它。 该测试仅查找手动插入的数据。 这是yml文件:
one:
name: 'Dan'
two:
name: 'Sam'
我究竟做错了什么? 是否需要启用某些设置才能将yml数据加载到neo4j中?
更新:看来neo4j与Rails装置不兼容,并且有充分的理由:该语言无法描述关系。 我正在开发新的扩展语法和实现,该实现将允许使用夹具来测试使用neo4j的Rails应用程序。
neo4j
gem尚未包含对Rails固定装置的支持。 它实际上是一个ActiveRecord功能,我们尚未使用。 首先,我建议您查看factory_girl:
https://github.com/thoughtbot/factory_girl
它为定义工厂和在测试中创建对象提供了更加动态和易于维护的系统。 当然,这意味着您的测试会变慢,因为它们需要为每个测试进行数据库调用,而不是像夹具那样在一开始就设置对象。
很多人陷入“一种方法必须更好”的心态,并说您需要使用固定装置或工厂。 我认为在一个项目中两者实际上都有余地。 夹具特别适合那些您将永远存在的物体。 它们的最大问题之一是,在进行测试时,您需要参考夹具文件。
在您的编辑中,您提到固定装置不支持关系。 那不是真的。 ActiveRecord固定装置支持在YAML中定义用于指定关联值的属性。 在ActiveRecord中,关联是通过外键/联接表来管理的,但是在Neo4j中,关联是通过关系来完成的。 因此,我认为相同的结构会很好。 如果您想解决这个问题,请记住以下几点:
在ActiveRecord固定装置中,您可以直接指定外键列,也可以通过其名称指定关联并引用其标识符,如下所示:
### in pirates.yml
reginald:
name: Reginald the Pirate
monkey_id: 123
# OR
monkey: george
### in monkeys.yml
george:
name: George the Monkey
使用ActiveRecord固定装置,这些标识符实际上被哈希为一个整数,然后该整数始终用于数据库中该记录的ID。 这使设置关联变得容易。 对于neo4j.rb,可能需要执行一些类似的解决方法。 请注意,ActiveNode模型具有默认的uuid
属性,因此可能会被覆盖,但是您需要确保不影响用户的自定义id_property
定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.