У меня есть приложение Rails.
Старый код контроллера:
@articles = Articles.unpublished.find(complicated_conditions)
Я изменяю его на что-то вроде этого:
if logged_user.has_a_specific_permission
@articles = Articles.unpublished.find(complicated_conditions)
else
@articles = Articles.unpublished.find(another_hash_of_complicated_conditions)
end
Iхочу написать спецификацию для моего изменения, но я не думаю, что тестирование условий - лучший способ проверить функцию (но, пожалуйста, исправьте меня, если я ошибаюсь).
Так что в моей спецификации я хотелесть что-то вроде:
login_as(user_with_specific_permission)
permitted = stub('permitted article')
prohibited = stub('prohibited article')
Articles.stub!(:unpublished).and_return([permitted, prohibited])
get :index
assigns[:articles].should eql([permitted])
, чтобы проверить, фильтруют ли условия ожидаемые результаты, но это не работает, потому что я не могу вызвать .find с условиями в массиве.
Так как же проверить эту функцию?
tl; dr: Я хочу заглушить первую часть цепочки методов, но не могу вернуть массив, и я не могуне знаю, что я должен вернуть.