2012-06-27 2 views
6

RSong을 사용하여 주어진 몽고이드 쿼리가 이 아니고 레코드를로드하려고 시도 중입니다. 레코드가 크고 (수 MB), 코드가 존재하는지 여부를 확인하기 만하면됩니다. 기록이 존재하지 않습니다.몽고 이드가 생성하는 쿼리 유형을 어떻게 테스트 할 수 있습니까?

내가 협회에 .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과 비슷한 것을 기대했다. Moped 어딘가 깊은 곳에있을 거라 확신합니다. –

+0

나는 Mongoid/Moped를 잘 모른다. 불행히도 (나는 MongoMapper를 유지한다). 만약 to_sql을 원한다면, 문서로 변환되기 전에'Mongoid :: Criteria'를보기를 원할 것입니다. 트릭은 조건이 실제로 쿼리로 실행되기 전에 손을 잡을 것입니다. –

답변

0
profile.chart.nil?  

이 작동하지 않습니까?

+0

어떻게하면 객체가로드되지 않았는지 테스트 케이스를 작성하는 데 도움이됩니까? –

관련 문제