Question

J'utilise rails_admin et dans mes rails concevoir 3 applications et l'écriture de tests pour le contrôle d'accès dans le concombre.

Je veux tester que quelqu'un ne administrateur ne peut pas accéder toutes les routes de rails_admin (par exemple)

Si je explicitement test comme ceci:

  Scenario: An authenticated user cannot access site administration
    Given I am an authenticated user "kate", "kate@example.com"
    When I visit the administration page
    Then I should see access denied

Je peux correspondre à la chaîne « la page d'administration » à la route « rails_admin_dashboard_path » et faire mon test passe très bien. Mais cela semble tester l'application dans le mauvais sens. Je veux tester toutes les routes (boucle à travers eux en quelque sorte) plutôt que de les impliquer et peut-être manquer un ou deux.

Quelque chose comme ceci:

  Scenario: An authenticated user cannot access site administration
    Given I am an authenticated user "kate", "kate@example.com"
    When I visit ANY administration page
    Then I should see access denied

Quelqu'un pourrait-il me conseiller sur la façon de tester efficacement ce? Est-ce que je prends la bonne approche? Dois-je faire cela à la place rspec?

Comme vous pourriez être en mesure de dire, je suis un peu n00b.

Était-ce utile?

La solution

Je ne pense pas que vous devriez viser à tester tous les itinéraires possibles dans vos scénarios de concombre. Comme Andrea S. suggère, si tous vos contrôleurs d'administration ont une base commune, alors il devrait être suffisant pour vérifier la page d'accueil d'administration.

Autres conseils

Une approche serait de créer un contrôleur de base dans votre espace de noms admin que tous les autres admin / contrôleurs héritent. Vous pouvez mettre un filtre avant dans ce contrôleur de base pour vérifier l'authentification admin. Comme ceci:

#app/controllers/admin/base.rb

class Admin::Base < ApplicationController
  before_filter :ensure_admin_logged_in
end

Et que tous vos autres contrôleurs dans l'espace de noms Hériter admin de celui-ci:

#app/controllers/admin/Pages.rb
class Admin::PagesController < Admin::Base
  layout "admin"
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top