2013-07-10 3 views
1

Привет У меня есть следующий запрос в контроллере, и я хочу написать спецификацию Rspec. Я новичок в Rspec, и я не знаю, как написать спецификацию. Пожалуйста, помогитеКак написать спецификацию Rspec для следующего запроса

table1.includes(:table2).where(table1: {id: params[:id]}).includes(:table3) 

Я также попытался смотреть в издевается и корешки, но я не понимаю, как использовать их для запроса, как это.

Благодаря

+2

Что вы пытаетесь протестировать? –

+0

Вы пытаетесь понять, что он работает в течение определенного времени, что он «правильный» и возвращает ожидаемые результаты или что-то еще? Вам нужно знать, что вы хотите проверить, прежде чем мы сможем помочь. – jefflunt

+0

@ChrisHeald, Normalocity - я хочу, чтобы запрос возвращал требуемый результат. – rajkumarts

ответ

1

Столкнувшись с этими проблемами, я склонен инкапсулировать запрос в методе. Таким образом, вы можете полностью исключить метод данными и не беспокоиться о санитарии данных.

Например:

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')

Это, или что-то подобное. Следует также отметить, что эти тесты должны быть в модели, а не в контроллере.

Смежные вопросы