Frage

Ich arbeite an einer Rails 3 Web-App im Moment mit RSpec 2 und wir verwenden Devise für die Authentifizierung. Ein (und bald viele) unser Controller muss der Benutzer angemeldet sein. Ich weiß, dass die Devise sign_in Test Helfer bietet, kann es aber mit einem RSpec oder Mokka Mock-Objekt verwendet werden?

I @user = mock_model(User) ursprünglich versucht, wo Benutzer die Devise Klasse. Dies würde nicht Arbeit mit sign_in :user, @user als get 'index' auf das Zeichen in Form umleiten würde.

Hat jemand irgendwelche Erfahrungen mit Tests erarbeitet und kann helfen?

War es hilfreich?

Lösung

Wir hatten ein ähnliches Problem, aber unter Verwendung von Factory Girl. Wir lösten es gerne so:

In spec_helper.rb:

config.include Devise::TestHelpers, :type => :controller

In der Controller-Spezifikation (nur eine Wrapper-Methode):

def login_user(user)
    sign_in user
end

Dann in jeder Methode, die Sie benötigen, können Sie tun:

login_user(Factory(:user))

... wo Sie haben ein Benutzerobjekt in factories.rb definiert. Nicht sicher, ob dies mit Mocks funktioniert aber.

Andere Tipps

Ein Mock wird nie an der Arbeit. Wenn Sie sich anmelden sagen, wird der Benutzer in der Sitzung gespeichert (im Grunde, die Benutzerklasse und seine id). Wenn Sie den Controller zuzugreifen, wird eine andere Benutzerobjekt basierend auf den gespeicherten Daten abgerufen. Der beste Weg, das Problem mit etwas, dass verharrt das Objekt, wie Factory Girl.

lösen

schlug ich das gleiche Problem. Ich mache folgendes jetzt:

before(:each) do
  # sign_in mock_user
  request.env['warden'] = mock(Warden, :authenticate => mock_user,
                                       :authenticate! => mock_user)
end

Ich habe ein Problem geschaffen für hier diese: https://github.com/ plataformatec / devise / Ausgaben # Ausgabe / 928 Go Stimme!

Keiner von ihnen arbeitete für mich (MRI 1.9.3-preview1, Schienen 3.0.1.rc5).

Das ist die Lösung, die ich gefunden: http: / /blog.joshmcarthur.com/post/6407481655/integration-tests-with-devise-and-rspec

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top