2012-06-27 28 views
6

Tôi đang cố gắng khẳng định, sử dụng RSpec, một truy vấn Mongoid nhất định sẽ không tải, chỉ kiểm tra sự tồn tại của nó, vì bản ghi lớn (vài MB) và mã chỉ cần biết liệu không phải bản ghi tồn tại.Làm cách nào để kiểm tra loại truy vấn Mongoid sẽ tạo ra?

Tôi đã chơi với .exists? trên các hiệp hội, nhưng đối với một số lý do mà dường như không làm việc với has_one như:

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 

Phương pháp exists? ủy quyền rõ ràng không làm việc cho has_one mối quan hệ; mặc dù nó được ghi lại cho has_many. Tôi muốn tự làm thủ công, nhưng tôi cần kiểm tra trong RSpec rằng bản ghi thực sự chỉ được truy vấn không được tải. Tôi đang suy nghĩ về việc làm một cái gì đó như thử nghiệm cho các truy vấn cơ bản được tạo ra cho người lái xe Mongo, giống như bạn có thể làm với .to_sql. Có phương pháp Mongoid tương ứng không?

+0

Có thể bạn sẽ muốn cắt phần của Mongoid xử lý việc chuyển đổi phản hồi BSON thành tài liệu, sau đó đảm bảo rằng nó không được gọi. –

+0

Có đoạn mã cho tôi không? Tôi đã hy vọng nhiều hơn cho một cái gì đó tương tự như .to_sql trong Arel. Tôi chắc rằng nó ở đâu đó sâu trong Moped. –

+0

Tôi không biết Mongoid/Xe máy tốt lắm, thật không may (tôi duy trì MongoMapper). Nếu bạn muốn một tương đương to_sql, bạn sẽ muốn nhìn vào 'Mongoid :: Criteria' của bạn trước khi nó được chuyển đổi thành tài liệu. Bí quyết sẽ nhận được bàn tay của bạn trên đó trước khi các tiêu chí thực sự chạy như một truy vấn. –

Trả lời

0
profile.chart.nil?  

không hoạt động?

+0

Làm thế nào để điều này giúp tôi viết một trường hợp thử nghiệm mà đối tượng không được nạp? –

Các vấn đề liên quan