我很难对失败的测试进行故障排除,其中conn.assigns既是同一测试语句的一部分,又在两行测试之间清空.
我正在阅读"编程凤凰",并重新编写代码以使其与Phoenix 1.3一起使用.在3个测试中,存储在conn.assigns中的:current_user在测试过程中丢失,例如在删除和获取控制器测试之间.
测试代码是:
describe "delete video" do
setup [:login_user, :create_video]
test "deletes chosen video", %{conn: conn, video: video} do
conn = delete conn, video_path(conn, :delete, video)
assert redirected_to(conn) == video_path(conn, :index)
assert_error_sent 404, fn ->
Logger.warn("Before get: #{inspect(conn.assigns)}")
conn = get conn, video_path(conn, :show, video)
Logger.warn("After get: #{inspect(conn.assigns)}")
conn
end
end
end
Run Code Online (Sandbox Code Playgroud)
我添加了Logger.warn指令来检查get请求之前和之后的连接.在"Before get:"日志中,我仍然有一个conn.assigns:current_user key,但在随后的"After get"日志中,它已经消失了.
我最初认为我的身份验证机制负责这一点,但我创建了一个Logging Plug来检查管道,我可以看到,从管道的开始,调用get,current_user从分配中丢失.
这是测试输出,显示管道开始/结束时的日志记录以及上面测试的日志.
ubuntu@ubuntu-xenial:~/rumbl$ MIX_ENV=test mix test test/rumbl_web/controllers/video_controller_test.exs:98
[info] Already up
Including tags: [line: "98"]
Excluding tags: [:test]
warning: module attribute @update_attrs was …Run Code Online (Sandbox Code Playgroud)