2016-12-04 19 views
2

minitestでコントローラ内のインスタンス変数にアクセスしようとしています。例えばMinitestでコントローラインスタンス変数にアクセスする

microposts_controller.rb:

def destroy 
    p "*"*40 
    p @cats = 42 
end 

どのように私はminitestと内部microposts_controller_test.rb@catsの値をテストするのでしょうか?

私は、ブラウザからdeleteリクエストを送信し、私のサーバーのログをチェックして見つけることができます知っている:

"****************************************" 
42 

私はすべてのインスタンス変数とassignsハッシュへのアクセス権を持っていることanother answerに読みますが、それはdidnの仕事はありません。また、controllerオブジェクトの内部を調べてみました。以下に示す:

microposts_controller.rb:

test "@cats should exist in destroy method" do 
    delete micropost_path(@micropost) 
    p controller.instance_variables 
    p assigns[:cats] 
end 

出力:

[:@_action_has_layout, :@_routes, :@_request, :@_response, :@_lookup_context, :@_action_name, :@_response_body, :@marked_for_same_origin_verification, :@_config, :@_url_options]0:04 
nil 

Iはcontrollerオブジェクト内部@catsインスタンス変数を参照するために期待していました。私はまた、42が出力されることを期待していました。

私はここで何が欠けていますか?

答えて

0

deleteリクエストがリダイレクトされていたため、ユーザーがログインしていることを確認するbefore_actionがありました。

また、有効なユーザーIDをセッションに挿入するテストヘルパーもあります。そのすべてを使用すると、期待通りに動作します:)

microposts_controller_test.rb:

test "@cats should exist?" do 
    log_in_as(users(:michael)) 
    delete micropost_path(@micropost) 
    p controller.instance_variables 
    p assigns[:cats] 
end 

test_helper.rb:

def log_in_as(user) 
    session[:user_id] = user.id 
end 

出力:

[:@_action_has_layout, :@_routes, :@_request, :@_response, :@_lookup_context, :@_action_name, :@_response_body, :@marked_for_same_origin_verification, :@_config, :@current_user, :@_params, :@micropost, :@cats, :@_url_options] 
42 
関連する問題