2013-12-01 6 views
0

Одна из возможностей по умолчанию для моей модели настроена на автоматическую загрузку связанной модели с помощью includes(). Как проверить эту функциональность с помощью RSpec? Я попытался запустить:RSpec: Test Scope Eager Loading

Model.includes(:relation).to_sql 

Надеясь я мог обнаружить подпись в SQL, но он вернулся только это:

SELECT "models".* FROM "models" 

Нет упоминания о связи, это, очевидно, сделано со вторым запросом. Как вы порекомендовали бы это?

+1

Обратитесь к этому [SO вопрос] (http://stackoverflow.com/questions/1376212/how-to-determine-if-rails-association-is-eager -loaded) – konyak

ответ

0

Я бы, вероятно, спустился по маршруту, выполняя метод и устанавливая ожидание.

Узор бы добавить двойной тест вашей модели и установить ожидания, что он принимает .includes вызов метода

Тестирование фактического SQL вызова, созданный Rails, кажется, больше о тестировании Rails, а не ваше приложение и плотно соединяет его с реализацией. Тестирование того, что метод вызван, является хорошей средой, с пониманием того, что, если ее назовут, Rails пойдет правильно.

Здесь намного больше информации https://www.relishapp.com/rspec/rspec-mocks/v/2-14/docs/method-stubs, чтобы лучше понять процесс.

Есть некоторые практические советы по использованию здесь http://solnic.eu/2012/02/02/yes-you-should-write-controller-tests.html

+1

Я не уверен, как это применить, можете ли вы привести примерный код того, как проверить, вызван ли метод 'includes'? Я согласен, тестирование исходного SQL было бы слишком близко к реализации, чтобы быть практичным. Мое намерение состояло в том, чтобы сравнить его с SQL, сгенерированным другим запросом, ограничив его тестированием только результатов. – Jonah