Что именно у вас вопрос? Как настроить базовые тесты для отношений или как проверить управление current_user?
Основные тесты для этого должны быть в спецификациях моделей, поскольку задача модели заключается в том, чтобы разобраться в таких вещах.
Я обычно проверяю это так:
1) определить приборы (или поочередно использовать что-то вроде FactoryGirl) для двух пользователей и некоторых ресурсов (три для этого примера). активы для пользователя a называются asset_a_ *, активы для пользователя b asset_b _ *)
2) Тест просто такой:
users(:users_a).assets.should have(3).records
users(:users_a).assets.should include(assets(:asset_a_a))
users(:users_a).assets.should include(assets(:assets_a_b))
users(:users_a).assets.should include(assets(:assets_a_c))
Вы можете настроить это как
users (: users_a) .assets.find (assets (: asset_a_a) .id). должны включать (assets (: asset_a_a))
users (: users_a) .assets.find (assets (: asset_a_a) .id) .should_not include (assets (: asset_b_a))
Если вы абсолютно хотите, вы можете использовать аналогичные тесты для части контроллера.
Хотя довольно много дискуссий о том, нужно ли вообще тестировать такую базовую функциональность, поскольку в основном это базовая функциональность Rails для обработки ассоциаций, которые вы определили в вашей модели.
Лично я делаю такое тестирование по некоторым причинам. Во многих случаях такие ассоциации, связанные с разрешениями, вскоре становятся более сложными и в любом случае нуждаются в подробных тестах. или кто-то может изменить параметры ассоциации и что-то сломать.
II - О части current_user в контроллере.
Конечно, это зависит от того, как вы обрабатываете аутентификацию для начала. Если вы используете плагин, такой как AuthLogic (или любой другой), он может иметь несколько методов, которые позволяют имитировать вход в систему в rspec. Для authlogic вы можете сделать что-то вроде этого:
before(:each) do
activate_authlogic
UserSession.create(users(:user_a))
end
Это активирует authlogic и 'login' user_a.
Затем вы запускаете свой контроллер
get :index
response.should be_success
response.should render_template :index
assigns(:assets).should # => more or less as above, check that there are the right aessets.