Это действительно зависит от того, как вы настроили свой код для проверки авторизации и как вы проверяете его в действиях. Я могу рассказать вам, что мы делаем в качестве примера. У нас есть роли, как у вас, и некоторые страницы, требующие входа в систему, некоторые, требующие роли, а некоторые с разным выводом в зависимости от роли. Мы тестируем каждый тип немного по-разному.
Сначала мы тестируем авторизацию и авторизируемся отдельно.
Кроме того, мы создали фильтры для действий, требующих входа пользователя в систему, а затем других для выполнения определенной роли. Например, check_admin
, check_account_owner
и т. Д. Затем мы можем проверить, работают ли эти фильтры самостоятельно.
Затем мы добавляем проверки в тестах контроллера, чтобы вызывались правильные фильтры. Мы использовали musta и написали несколько простых расширений, чтобы мы могли добавлять проверки вроде:
should_filter_before_with :check_admin, :new
Таким образом, мы тестируем то, что должно быть проверено, и не более.
Теперь, для более сложных действий, которые выполняют различную логику в зависимости от роли, мы проверяем эти действия для каждой роли, которая содержит специальную логику. Мы не пишем тесты для ролей в этом действии, которые будут отфильтрованы или являются надмножествами других ролей. Например, если действие добавляет дополнительные поля в форму, если вы являетесь администратором, мы тестируем не-администраторов и администраторов. Мы не тестируем администраторов и супер-администраторов, поскольку наш код для проверки ролей понимает, что супер-администраторы - это администраторы.
Кроме того, для шаблонов, которые содержат логику для отображения определенных элементов только для определенных ролей, мы пытаемся переместить этот код в помощники или, если они распространены, например, панель инструментов администратора, в партиалы. Тогда мы сможем проверить их самостоятельно, а не на каждом действии, которое включает их.
Подводя итог, проверьте только то, что вам нужно для данного действия. Точно так же, как вы не будете тестировать внутренние компоненты Rails в своих модульных тестах, если вы пишете общий код для проверки ролей и проверяете его, вам не нужно проверять его снова при каждом действии.