2012-06-27 12 views
6

RSpecを使用して、特定のMongoidクエリがでないことをアサートしようとしていますがレコードを読み込み、レコードが大きい(数MB)ためにその存在をチェックするだけです。レコードは存在しません。Mongoidが生成するクエリの種類をテストするにはどうすればよいですか?

私は団体の.exists?でプレーしてきたが、has_oneように動作するようには思えない何らかの理由:

class Profile 
    include Mongoid::Document 

    has_one :chart 
end 

class Chart # this is heavy 
    include Mongoid::Document 

    belongs_to :profile 
end 

profile.chart.exists? # fails if chart returns nil 

exists?プロキシメソッドが明らかにhas_one関係のために動作しません。それはhas_manyについて文書化されています。私は自分で工作したいと思っていますが、私はRSpecで実際にレコードに読み込まれていないかどうかだけ調べる必要があります。 .to_sqlと同じように、Mongoドライバに生成される基本クエリのテストのようなことをすることを考えています。対応するモンゴイド法はありますか?

+0

BSONレスポンスの変換を扱うMongoidの部分をドキュメントにスタブして、それが呼び出されていないことを確認してください。 –

+0

私のためのコードスニペットがありますか? Arelの.to_sqlに類似したものをもっと期待していました。私はそれがモペットのどこかにあると確信しています。 –

+0

私はMongoid/Mopedについてよく分かりませんが、残念ながら(私はMongoMapperを維持しています)。 to_sqlを同等にするには、文書に変換する前に 'Mongoid :: Criteria'を見たいと思うでしょう。そのトリックは、基準が実際にクエリとして実行される前に手をつけています。 –

答えて

0
profile.chart.nil?  

は動作しません。

+0

これは、オブジェクトが読み込まれていないというテストケースを書くのにどのように役立ちますか? –

関連する問題