【问题标题】:How to load neo4j test database with data from fixtures/ yml file?如何使用来自fixtures/ yml 文件的数据加载neo4j 测试数据库?
【发布时间】:2015-09-11 21:01:54
【问题描述】:

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

当我直接连接到测试数据库并执行 Cypher 查询以插入数据时,测试会找到数据并对其做出正确反应。但是,当我在 test/fixtures/users.yml 文件中指定数据时,它不会加载。测试只找到手动插入的数据。这是 yml 文件:

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

我做错了什么?我必须启用一些设置才能将 yml 数据加载到 neo4j 中吗?

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

【问题讨论】:

    标签: ruby-on-rails ruby testing neo4j neo4j.rb


    【解决方案1】:

    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 定义。

    【讨论】:

    • 我知道这相当多,所以如果您有任何其他问题,请随时在我们的 Gitter 频道中提问:gitter.im/neo4jrb/neo4j
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多