【发布时间】:2017-09-23 02:24:35
【问题描述】:
我将 login_as 标记添加到我的测试中,并且 phoenix 开始给出该异常:
defmodule Rumbl.VideoControllerTest do
use Rumbl.ConnCase
setup %{conn: conn} = config do
if username = config[:login_as] do
user = insert_user(username: username)
conn = assign(conn(), :current_user, user)
{:ok, conn: conn, user: user}
else
:ok
end
end
@tag login_as: "max"
test "list all user's videos on index", %{conn: conn, user: user} do
user_video = insert_video(user, title: "funny cats")
other_video = insert_video(insert_user(username: "other"), title: "another video")
conn = get conn, video_path(conn, :index)
assert html_response(conn, 200) =~ ~r/Listing Videos/
assert String.contains?(conn.resp_body, user_video.title)
refute String.contains?(conn.resp_body, other_video.title)
end
test "requires user authentication on all actions", %{conn: conn} do
Enum.each([
get(conn, video_path(conn, :new)),
get(conn, video_path(conn, :index)),
get(conn, video_path(conn, :show, "123")),
get(conn, video_path(conn, :edit, "123")),
put(conn, video_path(conn, :update, "123", %{})),
post(conn, video_path(conn, :create, %{})),
delete(conn, video_path(conn, :delete, "123")),
], fn conn ->
assert html_response(conn, 302)
assert conn.halted
end)
end
end
它在第 15 行抱怨,这是 @tag login_as: "max" 行,它在标签之前工作
嗯,我不确定这个错误对 rand_seed 意味着什么,因为我没有使用任何加密函数:
1) 测试在索引上列出所有用户的视频 (Rumbl.VideoControllerTest) 测试/控制器/video_controller_test.exs:15 ** (UndefinedFunctionError) 函数 :crypto.rand_bytes/1 未定义或私有。您是指以下之一吗:
* rand_seed/0 * rand_seed/1 stacktrace: (crypto) :crypto.rand_bytes(8) (rumbl) test/support/test_helpers.ex:8: Rumbl.TestHelpers.insert_user/1 test/controllers/video_controller_test.exs:6: Rumbl.VideoControllerTest.__ex_unit_setup_1/1 test/controllers/video_controller_test.exs:1: Rumbl.VideoControllerTest.__ex_unit__/2
test_helpers.ex 来源:
defmodule Rumbl.TestHelpers do
alias Rumbl.Repo
def insert_user(attrs \\ %{}) do
changes = Dict.merge(%{
name: "Some User",
username: "user#{Base.encode16(:crypto.rand_bytes(8))}",
password: "supersecret",
}, attrs)
%Rumbl.User{}
|> Rumbl.User.registration_changeset(changes)
|> Repo.insert!()
end
def insert_video(user, attrs \\ %{}) do
user
|> Ecto.build_assoc(:videos, attrs)
|> Repo.insert!()
end
end
【问题讨论】:
-
可以发
test/support/test_helpers.ex的内容吗? -
已发布,有加密功能:P 但不知道为什么它会抱怨标签