Примеры тестов Cleanup ExUnit
У меня есть следующие тесты в приложении Phoenix:
defmodule TattooBackend.Web.API.V1.PasswordControllerTest do
use TattooBackend.Web.ConnCase, async: true
use Bamboo.Test
alias TattooBackend.Web.Endpoint
alias TattooBackend.Accounts.Account
alias TattooBackend.Repo
alias Phoenix.Token
alias Comeonin.Bcrypt
import TattooBackend.AuthenticationRequiredTest
test "without passwords", %{conn: conn} do
account = insert(:account)
token = Token.sign(Endpoint, "account_id", account.id)
conn =
conn
|> put_req_header("authorization", "#{token}")
|> post(api_v1_password_path(conn, :create))
assert json_response(conn, 422)
end
test "with wrong password confirmation", %{conn: conn} do
account = insert(:account)
token = Token.sign(Endpoint, "account_id", account.id)
params = %{password: "new-password", password_confirmation: "password"}
conn =
conn
|> put_req_header("authorization", "#{token}")
|> post(api_v1_password_path(conn, :create, params))
assert json_response(conn, 422)
end
end
Эти строки повторяются в тестах:
account = insert(:account)
token = Token.sign(Endpoint, "account_id", account.id)
Любая идея, как сделать его более сухим?
1 ответ
Решение
Если вы хотите выполнить эти две строки во всех тестах, вы можете поместить повторяющийся код в setup
обратный вызов, а затем использовать сопоставление с образцом, чтобы получить их в каждом тесте:
defmodule TattooBackend.Web.API.V1.PasswordControllerTest do
...
setup do
account = insert(:account)
token = Token.sign(Endpoint, "account_id", account.id)
[account: account, token: token]
end
test "without passwords", %{conn: conn, account: account, token: token} do
conn =
conn
|> put_req_header("authorization", "#{token}")
|> post(api_v1_password_path(conn, :create))
assert json_response(conn, 422)
end
test "with wrong password confirmation", %{conn: conn, account: account, token: token} do
params = %{password: "new-password", password_confirmation: "password"}
conn =
conn
|> put_req_header("authorization", "#{token}")
|> post(api_v1_password_path(conn, :create, params))
assert json_response(conn, 422)
end
end
setup
выполнит свой код перед каждым тестом, а затем передаст account
а также token
к каждому тесту.