如何用fixture / yml文件中的数据加载neo4j测试数据库



这是我第一次用Ruby on Rails开发,我使用Neo4j作为数据库。我已经安装了一个测试版本,创建了一些表示节点的模型,并编写了一个基本测试以确保一切正常。这个测试非常简单:它获取所有用户并打印他们的名字。

当我直接连接到测试数据库并执行Cypher查询来插入数据时,测试会找到数据并正确地对其做出反应。但是,当我在测试/fixture/用户中指定数据时。Yml文件,它不加载。测试只查找手动插入的数据。下面是yml文件:

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

我做错了什么?是否有一些设置,我必须启用加载yml数据到neo4j?

更新:neo4j似乎与Rails fixture不兼容,这是有充分理由的:该语言无法描述关系。我正在开发新的、扩展的语法和一个实现,它将允许fixture用于测试使用neo4j的Rails应用程序。

对Rails fixture的支持还没有放到neo4j gem中。它实际上是一个ActiveRecord特性,只是我们还没放进去。首先,我建议查看factory_girl:

https://github.com/thoughtbot/factory_girl

它提供了一个更动态、更容易维护的系统,可以在测试中定义工厂和创建对象。当然,这意味着您的测试将会变慢,因为它们需要为每个测试调用数据库,而不是像fixture那样在开始时设置对象。

很多人有一种"一种方法一定更好"的心态,说你要么使用固定装置,要么使用工厂。我认为在一个项目中,这两种方法都是有空间的。固定装置是很好的,特别是对于那些你知道会一直在那里的东西。它们最大的问题之一是,当您进行测试时,需要引用您的fixture文件。

在你的编辑中你提到fixture不支持关系。这并不完全正确。ActiveRecord fixture支持在YAML中定义属性,为关联指定值。在ActiveRecord中,关联是通过外键/连接表来管理的,但在Neo4j中,它们只是通过关系来完成的。所以我想同样的结构就可以了。如果你想解决这个问题,我建议你记住以下几点:

在ActiveRecord fixture中,您可以直接指定外键列,或者您可以通过它的名称指定关联并引用它的标识符,如下所示:

### in pirates.yml
reginald:
  name: Reginald the Pirate
  monkey_id: 123
  # OR
  monkey: george
### in monkeys.yml
george:
  name: George the Monkey

与ActiveRecord fixture,这些标识符实际上是散列到一个整数,然后该整数总是用于该记录的ID在数据库中。这使得设置关联变得很容易。可能需要为neo4j.rb做一些类似的工作。注意,ActiveNode模型有一个默认的uuid属性,所以可能会被覆盖,但你要确保你不影响用户的自定义id_property定义。

相关内容

  • 没有找到相关文章

最新更新