この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_user
をcurrent_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
'current_user'をあなたのアプリ(認証プラグ?)に割り当てるコードを投稿できますか?既に設定されていても、おそらく 'nil'に設定しています。 – Dogbert
@Dogbertのように見えます。私がテストを実行しているとき、ユーザーは 'nil'です。 – Katherine