2011-01-14 5 views
0

Ich Refactoring einige Spezifikationen, in Controller-Spezifikationen Ich habe eine before(:each), die Dinge in der Sitzung erforderlich eingerichtet, wollte Doppelarbeit vermeiden und setzen die Ersteinrichtung global für jeden Controller specSitzungsvariable nicht verfügbar in global vor (: jeder,: Typ =>: Controller)

meine vor Filter ist ...

config.before(:each, :type => :controller) do 

    #... 

    session[:current_user] = @user 
    session[:instance] = @instance 

    #... 

end 

@user und @instance sind auch in der before(:each) gesetzt ich gerade sie zur besseren Lesbarkeit hier versteckt haben

Ich erhalte die folgenden Fehler bei der Ausführung der Steuerung

undefined method `session' for nil:NilClass 

Tests würde ich die globale erwarten, bevor Rückrufe die gleichen Dinge wie die, die in den einzelnen Tests haben, aber ich denke, vielleicht sie geladen werden, bevor die Schienen Umwelt initialisiert worden?

Dank

Antwort

1

Verwenden controller.stub!(:session, { :current_user => @user, :instance => @instance })

+0

perfekt! Vielen Dank – Rob

0

Ich denke, das mehr ist mit Ruby und Blöcke (die Verschlüsse) zu tun. Der an before übergebene Block ist an den Kontext gebunden, in dem er erstellt wurde, und session ist in diesem Kontext nicht verfügbar.

Verwandte Themen