这是我第一次在Ruby on Rails上开发,我正在使用Neo4j作为数据库。我已经安装了一个测试版本,创建了一些代表节点的模型,并编写了一个基本的测试来确保一切正常。测试非常简单:它获取所有用户并打印他们的名字。
当我直接连接到测试数据库并执行Cypher查询以插入数据时,测试会找到数据并对其做出正确反应。但是,当我在test / fixtures / users.yml文件中指定数据时,它不会加载。测试仅查找手动插入的数据。这是yml文件:
one:
name: 'Dan'
two:
name: 'Sam'
我做错了什么?是否有一些设置我必须启用将yml数据加载到neo4j?
更新: 似乎neo4j与Rails装置不兼容,并且有充分理由:该语言无法描述关系。我正在开发新的,扩展的语法和一个实现,允许使用fixture来测试使用neo4j的Rails应用程序。
答案 0 :(得分:0)
对Rails灯具的支持还没有放入neo4j
宝石中。它实际上是一个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
定义。