2017-02-20 5 views
0

このhereおよびhereと同様の回答がありましたが、動作していないようです。テスト中に現在のユーザーをセッション中に割り当てます。

テスト時にcurrent_userをセッションに割り当てることができません。私のテストは、この

setup do 
    %User{ 
    id: 123456, 
    name: "MyName", 
    email: "[email protected]", 
    password_hash: Comeonin.Bcrypt.hashpwsalt("password") 
    } |> Repo.insert 

{:ok, user: Repo.get(User, 123456) } 
end 

ように設定されていると私はここでCONNを検査すると私のテストは

test "renders index.html on /coping-strategy", %{user: user} do 
    conn = conn 
     |> assign(:current_user, user) 
     |> get(coping_strategy_path(conn, :index)) 
    assert html_response(conn, 200) =~ "Coping strategies" 
end 

current_userは正しくuserに割り当てられています。しかし、テスト中に私のコントローラでconnを調べると、current_userは常にnilになります。私はbuild_connも使ってみましたが、まだそれはゼロです。ここで

はコントローラです:

def index(conn, _params) do 
    user_id = conn.assigns.current_user.id 
    coping_strategies = Post 
         |> Post.get_coping_strategies(user_id) 
         |> Repo.all 
    render conn, "index.html", coping_strategies: coping_strategies 
end 

私はCURRENT_USER以外の何かを代入しようとした場合、私は、コントローラでCONNを検査する場合、それが表示されます。だから、私が|> assign(:stuff, "test")のテストで追加した場合、私はstuff: "test"を割り当てています。テストとコントローラでcurrent_usercurrent_user2に変更すると、それは動作します。これは、current_user2が更新され、期待通りに渡されるためです。

このように現在のユーザーを割り当てることができない理由は何ですか。また、常にそれがnilである理由はありますか?私はcurrent_userのためにこれを行うために欠けている何かのステップはありますか?

編集

あなたは直接のテストでassigns:current_userを設定しているので、CURRENT_USERは、認証プラグ

def call(conn, repo) do 
    user_id = get_session(conn, :user_id) 
    user = user_id && repo.get(Healthlocker.User, user_id) 
    assign(conn, :current_user, user) 
end 
+0

'current_user'をあなたのアプリ(認証プラグ?)に割り当てるコードを投稿できますか?既に設定されていても、おそらく 'nil'に設定しています。 – Dogbert

+0

@Dogbertのように見えます。私がテストを実行しているとき、ユーザーは 'nil'です。 – Katherine

答えて

2

に設定されているのはここ、あなたはからユーザーをフェッチスキップする必要がありますセッションの:user_idassignsがauthプラグに:current_userを含む場合:

def call(conn, repo) do 
    if conn.assigns[:current_user] do 
    conn 
    else 
    user_id = get_session(conn, :user_id) 
    user = user_id && repo.get(Healthlocker.User, user_id) 
    assign(conn, :current_user, user) 
    end 
end 
関連する問題