Я пытаюсь проверить область, в которой я располагаю, которая основана на цепочке других областей. («public_stream» ниже).Stubbing Chained Queries в Rails 3 и 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) }
Используя тест вроде этого:
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
Однако я продолжаю получать эту ошибку:
Failure/Error: Entry.public_stream(@user)
undefined method `includes_values' for #<Entry:0xd7b7c0>
кажется includes_values является переменной экземпляра ActiveRecord :: объект отношений , но когда я пытаюсь его заглушить, я все равно получаю ту же ошибку. Мне было интересно, есть ли у кого-нибудь опыт в создании новых цепочек Rails 3? Я могу найти кучу дискуссий по поводу хэша 2.x, но ничего не сказать о том, как протестировать текущее.
Из любопытства, это работает, если вы не используете 'public'?Между вашим именем области и ключевым словом Ruby 'public' существует конфликт. Не уверен, что это проблема, но было бы интересно, где в цепочке этот тест терпит неудачу. –
Области применения напрямую связаны с базой данных, поэтому нет смысла тестировать их изолированно. Просто создайте реальные записи и проверьте, что возвращает запрос. – RocketR