Как бороться с имитацией вложенных ресурсов в RSpec и Rails? - PullRequest
3 голосов
/ 02 июля 2011

У меня есть вложенный ресурс пользовательских списков чтения (пользователь has_many читающие списки).Я пытаюсь высмеять все в моих спецификациях контроллера, но не могу сделать это кратким.Вот предыдущий код для действия #show:

@reading_lists = mock("Reading lists")
@reading_lists.stub!(:find).with("1").and_return(@reading_list)
@user = mock_model(User, :reading_lists => @reading_lists)
User.stub!(:find).with("1").and_return(@user)
get :show, :user_id => "1", :id => "1"

, который тестирует:

def show
  @user = User.find(params[:user_id])
  @reading_list = @user.reading_lists.find params[:id]
end

Это похоже на сумасшедшее количество шаблонов - есть ли лучший способ сделать это

1 Ответ

4 голосов
/ 02 июля 2011

Нет лучшего способа сделать это, но вы правы, заметив, что это много котельной плиты.Причина в том, что user.reading_lists.find является нарушением закона Деметры.Независимо от того, считаете ли вы закон Деметры важным, насмешка над его нарушениями болезненна.

Я бы порекомендовал либо использовать реальные модели, либо упростить взаимодействие с моделью.Я не могу сказать, как, не видя, что вы пытаетесь указать.

...