我已经找到类似的答案,此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
和我的测试是
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其他的东西,那么就说明,当我检查控制器的康涅狄格州。因此,如果我在|> assign(:stuff, "test")
中添加了测试,那么我在0123中指定stuff: "test"
。如果我在测试和控制器中将current_user
更改为current_user2
,它会工作,因为current_user2会更新并按照我预期的那样传递。
是否有一个原因,我不能指定当前用户这样,为什么它总是零?有没有什么步骤我特意为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'的代码吗(认证插件?)?即使已设置,您可能会将其设置为“无”。 – Dogbert
@Dogbert看起来像它。当我运行测试时,用户是'nil'。 – Katherine