Столкнувшись с этими проблемами, я склонен инкапсулировать запрос в методе. Таким образом, вы можете полностью исключить метод данными и не беспокоиться о санитарии данных.
Например:
def fetch_table1_results(id)
table1.includes(:table2).where(table1: {id: id}).includes(:table3)
end
На данный момент, вы можете гасите метод, когда вам необходимо проверить вещи, которые зависят от него:
awesome_model = stub_model(Table1, fetch_table1_results: [1, 2, 'etc']) # You should include models, stubs, or mocks here.
Насколько Тестирования Фактический метод, я не уверен, что вам нужно. Не так много интересных частей этой цепи методов. Если вы хотите, чтобы быть полным, здесь являются случаи:
- Обеспечение
fetch_table1_results
вызывает любой экземпляр Table1.find с идентификатором
- Обеспечить
fetch_table1_results
нетерпеливые-нагрузки table2
и table3
способ сделать последнее варьируется, но я очень люблю (и это не будет популярным мнением) напрямую проверить запрос базы данных. Таким образом, вы можете ввести что-то вроде следующего:
fetch_table1_results(1).to_sql.should include('JOIN table2')
Это, или что-то подобное. Следует также отметить, что эти тесты должны быть в модели, а не в контроллере.
Что вы пытаетесь протестировать? –
Вы пытаетесь понять, что он работает в течение определенного времени, что он «правильный» и возвращает ожидаемые результаты или что-то еще? Вам нужно знать, что вы хотите проверить, прежде чем мы сможем помочь. – jefflunt
@ChrisHeald, Normalocity - я хочу, чтобы запрос возвращал требуемый результат. – rajkumarts