Тест Rspec для подписанного и админа? - PullRequest
1 голос
/ 21 февраля 2012

Я управлял доступом к определенным кнопкам навигации через партиал _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). Что ж, теперь я должен пройти тест в контексте.

...