Я работаю над приложением, в котором большая часть, если не все, данных ограничена до current_organization
. Так что в моих вызовах find в моих контроллерах у меня есть такие вещи, например:
def show
@user = current_organization.users.find(params[:id])
end
Тем не менее, в моих тестах на контроллере мне трудно найти правильный способ (или любой способ) заглушить эти вызовы, чтобы я мог проверить такие вещи, как:
get :show, :id => 1
assert_response :success
Те, которые не могут сказать, что AR не может найти пользователя с ID = 1 и organization_id = 3 "или что-то еще. Неважно, что я пытаюсь, я не могу обойти это.
Мой установочный блок выглядит примерно так:
setup do
company = organizations(:company) # fixture
@controller.stubs(:current_organization).returns(company)
# now what do I stub, if anything?
end
Я пытался сделать что-то вроде: company.stubs(:users).returns([users(:one), users(:two)])
, но это не сработало, потому что вызов AR find()
не существует для базового массива.
Должен ли я установить массив поддельных пользователей в переменную типа fake_users
, а затем сделать что-то вроде fake_users.stubs(:find).returns(@user)
? Это не правильно, но, возможно, это правильный путь.
Я просто ищу лучший способ справиться с этим. Я использую mocha и test / unit, если это важно или помогает.
Спасибо!