2010-11-22 3 views
0

Ich verwende Devise 1.0.8 für ein Rails 2.3.8-Projekt. In meinem Controller Test habe ich:current_user gibt TrueClass anstelle eines Benutzers in einem Controller mit Devise zurück

context "when current_user is admin" do 
    should "render" do 
    sign_in Factory(:admin) 
    get :index 
    assert_response :success 
    end 
end 

Und in der Steuerung selbst, gibt es die folgenden before_filter:

def redirect_if_not_admin 
    puts current_user 
    redirect_to root_path unless current_user.try(:admin?) 
end 

Dies ist die Ausgabe von meinem Test:

true 
false 

NoMethodError: undefined method `admin?' for true:TrueClass 

So current_user ist True, wenn ich sign_in im Test verwende. Aber wenn ich es nicht tue, ist current_user gleich Null, also ist es definitiv betroffen. Vielen Dank im Voraus für jede Hilfe.

Antwort

2

Ich habe die Bestätigung verwendet! Methode auf der Ressource in einem after_create/build, anstatt die Attribute in der Fabrik zu setzen, und das hat den Trick gemacht. current_user ist wahr, wenn auf der Site ein unbestätigter Benutzer ist (jemand, der sich angemeldet hat, aber noch nicht auf den Bestätigungslink geklickt hat).

Verwandte Themen