簡體   English   中英

如何使用fixtures / yml文件中的數據加載neo4j測試數據庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM