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 드라이버에 생성되는 기본 쿼리에 대한 테스트와 같은 일을 할 생각입니다. 해당 몽고 이드 방법이 있습니까?
BSON 응답을 문서로 변환하는 Mongoid의 부분을 스터브하고 나서 호출하지 않도록 할 수 있습니다. –
나를위한 코드 스 니펫이 있습니까? Arel의 .to_sql과 비슷한 것을 기대했다. Moped 어딘가 깊은 곳에있을 거라 확신합니다. –
나는 Mongoid/Moped를 잘 모른다. 불행히도 (나는 MongoMapper를 유지한다). 만약 to_sql을 원한다면, 문서로 변환되기 전에'Mongoid :: Criteria'를보기를 원할 것입니다. 트릭은 조건이 실제로 쿼리로 실행되기 전에 손을 잡을 것입니다. –