Как заглушить named_scope, чтобы .find можно было вызывать в наборе результатов? - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть приложение 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: Я хочу заглушить первую часть цепочки методов, но не могу вернуть массив, и я не могуне знаю, что я должен вернуть.

...