1

Ruby on Rails での開発は初めてで、データベースに Neo4j を使用しています。テスト バージョンをインストールし、ノードを表すいくつかのモデルを作成し、基本的なテストを作成して、すべてが機能していることを確認しました。このテストは非常に単純です。すべてのユーザーを取得し、その名前を出力します。

テストデータベースに直接接続し、Cypher クエリを実行してデータを挿入すると、テストはデータを見つけて正しく反応します。しかし、test/fixtures/users.yml ファイルでデータを指定すると、ロードされません。このテストでは、手動で挿入されたデータのみが検出されます。yml ファイルは次のとおりです。

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

私は何を間違っていますか?yml データを neo4j にロードするために有効にしなければならない設定はありますか?

更新: neo4j は Rails のフィクスチャと互換性がないようです。正当な理由があります: この言語は関係を記述できません。私は、neo4j を使用する Rails アプリをテストするためにフィクスチャを使用できるようにする、拡張された新しい構文と実装を開発中です。

4

1 に答える 1

0

Rails フィクスチャのサポートはneo4jgem に組み込まれていません。実際には、まだ実装していない ActiveRecord 機能です。まず、factory_girl をチェックすることをお勧めします。

https://github.com/thoughtbot/factory_girl

ファクトリを定義し、テストでオブジェクトを作成するシステムを、より動的で維持しやすくします。もちろん、フィクスチャのように最初にオブジェクトを設定するのではなく、テストごとにデータベース呼び出しを行う必要があるため、テストが遅くなることを意味します。

多くの人が「一方通行の方がよい」という考え方に陥り、フィクスチャまたはファクトリのいずれかを使用する必要があると言います。プロジェクトには実際に両方の余地があると思います。フィクスチャは、常にそこにあることがわかっているオブジェクトに特に適しています。それらの最大の問題の 1 つは、テストの作業中にフィクスチャ ファイルを参照する必要があることです。

あなたの編集で、フィクスチャは関係をサポートしていないと述べました。それは正確には真実ではありません。ActiveRecord フィクスチャは、関連付けの値を指定する YAML でのプロパティの定義をサポートします。ActiveRecord では関連付けは外部キー/結合テーブルを介して管理されますが、Neo4j では関係を介して行われます。だから、同じ構造でいいと思います。これに取り組みたい場合は、次の 2 つの点に注意してください。

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

于 2015-09-13T05:05:10.173 に答える