2016-09-13 2 views
2

Agile Web Development Mit Rails4 gibt ein Beispiel Testcode wie folgt aus:Wie verwende ich Session im Test Controller in Rails 5?

carts_controller_test.rb:

test "should destroy cart" do 
    assert_difference('Cart.count', -1) do 
    session[:cart_id] = @cart.id 
    ... 

Allerdings, wenn ich versuchen, dies in Schienen 5

>>rake test 

ein Fehler wird ausgelöst

NoMethodError: undefined method `session' for nil:NilClass

Wie verwendet man Sitzung in der Test-Controller in Schienen 5? Oder habe ich eine wichtige Konfiguration übersehen?

+0

@SergioTulentsev Haben Sie es unter Schienen laufen 5? Dieser Code versagt mit Schienen 5. –

+1

@RobinClowers: ehrlich, erinnere mich nicht. Ich werde meinen Kommentar zurückziehen. –

Antwort

0

Ich habe die Antwort in den Unable to set session hash in Rails 5 controller test

Test-Controller von rails5 erbt von ActionDispatch :: IntegrationTest standardmäßig während rails4 von Actioncontroller :: Testcase gefunden. Die Sitzung ist im Kontext von ActionDispatch :: IntegrationTest nicht verfügbar.

-1

Der folgende Code funktioniert:

delete cart_url(@cart), params: { 'session' => { :cart_id => @cart.id }} 
1

In Rails 5 nicht mehr möglich ist Sitzung in Controller-Tests zuzugreifen: http://blog.napcs.com/2016/07/03/upgrading-rails-5-controller-tests/. Der Vorschlag besteht darin, auf die Controller-Methode zuzugreifen, die den entsprechenden Sitzungswert für Sie festlegen würde. Dieser Kommentar zeigt ein Beispiel dafür, wie Sie diese Einschränkung umgehen könnte: https://github.com/rails/rails/issues/23386#issuecomment-192954569

# helper method 
    def sign_in_as(name) 
    post login_url, params: { sig: users(name).perishable_signature) 
    end 

class SomeControllerTest 
    setup { sign_in_as 'david' } 

    test 'the truth' do 
    .. 
Verwandte Themen