Я нашел похожие ответы на это 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")
в тест, то у меня есть stuff: "test"
в назначает в conn. Если я изменю 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' в вашем приложении (плагин для проверки подлинности?)? Вероятно, вы устанавливаете его на «nil», даже если он уже установлен. – Dogbert
@Dogbert, который выглядит так. пользователь «nil», когда я запускаю тесты. – Katherine