Tôi đang thử nghiệm một phạm vi mà tôi có dựa trên một chuỗi các phạm vi khác. ("public_stream" bên dưới).Cố định các Truy vấn được Chọn trong Rails 3 và Rspec
scope :public, where("entries.privacy = 'public'")
scope :completed, where("entries.observation <> '' AND entries.application <> ''")
scope :without_user, lambda { |user| where("entries.user_id <> ?", user.id) }
scope :public_stream, lambda { |user| public.completed.without_user(user).limit(15) }
Sử dụng một thử nghiệm như thế này:
it "should use the public, without_user, completed, and limit scopes" do
@chain = mock(ActiveRecord::Relation)
Entry.should_receive(:public).and_return(@chain)
@chain.should_receive(:without_user).with(@user).and_return(@chain)
@chain.should_receive(:completed).and_return(@chain)
@chain.should_receive(:limit).with(15).and_return(Factory(:entry))
Entry.public_stream(@user)
end
Tuy nhiên, tôi tiếp tục nhận được lỗi này:
Failure/Error: Entry.public_stream(@user)
undefined method `includes_values' for #<Entry:0xd7b7c0>
Dường includes_values là một biến thể hiện của các ActiveRecord :: đối tượng Relation nhưng khi tôi cố gắng khai thác nó, tôi vẫn nhận được lỗi tương tự. Tôi đã tự hỏi nếu có ai có kinh nghiệm với các truy vấn chuỗi mới của Rails 3 đang xâu chuỗi? Tôi có thể tìm thấy một loạt các cuộc thảo luận về băm tìm thấy 2.x, nhưng không có gì về cách kiểm tra những gì hiện tại.
Ra khỏi tò mò, nó có tác dụng nếu bạn không sử dụng 'public'?Có một xung đột giữa tên phạm vi của bạn và từ khóa Ruby 'public'. Không chắc chắn đó là vấn đề, nhưng nó muốn được quan tâm trong chuỗi thử nghiệm này thất bại. –
Phạm vi có liên quan trực tiếp đến cơ sở dữ liệu, do đó không có điểm nào trong việc thử nghiệm chúng một cách riêng biệt. Chỉ cần tạo một số bản ghi thực và kiểm tra những gì truy vấn trả về. – RocketR