2016-09-13 4 views
2
Rails4で

アジャイルウェブ開発は、このような例のテストコードを与える:レール5のテストコントローラでセッションを使用するには?

carts_controller_test.rb:しかし

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

、私は5

>>rake test 

レールでこれをしようとすると、エラーが発生しました

NoMethodError: undefined method `session' for nil:NilClass

レール5のテストコントローラでセッションを使用するにはどうすればよいですか?あるいは、私はいくつかの重要な設定を見落としましたか?

+0

@SergioTulentsevレール5で実行しましたか?このコードは、レール5で失敗します。 –

+1

@RobinClowers:正直なところ、覚えていません。私は私のコメントを撤回するつもりです。 –

答えて

0

私はrails5のコントローラがActionDispatchから継承:: IntegrationTestをデフォルトでActionControllerからrails4ながらUnable to set session hash in Rails 5 controller test

テスト:: TestCaseクラスで答えを発見しました。 SessionはActionDispatch :: IntegrationTestのコンテキストでは使用できません。

-1

次のコードは動作します

レール5に
delete cart_url(@cart), params: { 'session' => { :cart_id => @cart.id }} 
1

がコントローラ試験でセッションにアクセスすることはもはや可能ではない:http://blog.napcs.com/2016/07/03/upgrading-rails-5-controller-tests/。提案は、適切なセッション値を設定するコントローラメソッドにアクセスすることです。このコメントは、この制限を回避する方法を示しています。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 
    .. 
関連する問題