Я управлял доступом к определенным кнопкам навигации через партиал _header, который можно найти в app / views / layouts / _header.html.erb с помощью:
<% if signed_in? && current_user.admin? %>
<li><%= link_to "Profile", current_user %></li>
etc
Теперь я хотел бы написать тест для входа пользователя в систему, а также для администратора? логическое верно. У меня есть настройки фабрики, так что у нас есть:
factory :admin do
admin true
end
и тест, который у меня пока есть:
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit root_path
*this is where I want to test that the Profile, Settings, Users and New User
nav buttons are accessible but I am not sure what the test should say?*
*also should I add:
let (:signed_in) {FactoryGirl.create(user) } in under the first 'let'?*
Причина, по которой я задаюсь вопросом, нужен ли мне второй 'let', заключается в том, что мне нужно проверить, что пользователь подписан и имеет привилегии администратора.
Обновление
Я несколько пересмотрел тест, зашел в users_path вместо root_path, а затем добавил следующее:
it { should have_link('Users', href: users_path) }
it { should have_link('Profile', href: user_path(user)) }
it { should have_link('Settings', href: edit_user_path(user)) }
it { should have_link('New User', href: new_user_path) }
it { should have_link('Sign out', href: signout_path) }
it { should_not have_link('Sign in', href: signin_path) }
end
end
Тесты проходят успешно, за исключением ссылок «Профиль», «Новый пользователь» и «Настройки».
Если вы зайдете на страницу «Новый пользователь», то увидите все ссылки и нажмите на них, и все они будут работать.
Любые идеи или предложения.
Обновление 1
Если я создаю новый файл только с этим тестом и определяю метод «valid_signin (admin)», а затем везде, где у меня есть user_path (user), я заменяю его на user_path (admin) и, наконец, в блоке before do я удаляю существующие две строки и заменить на valid_signin (admin) ... тогда я получаю тест для прохождения.
Меня смутило то, что у меня был существующий valid_signin (сотрудник), и я подумал, что могу просто использовать valid_signin (admin).
Что ж, теперь я должен пройти тест в контексте.