Почему params_for не проходит через набор изменений?

Почему params_for не проходит модель набора изменений — главный вопрос. params_for генерирует 4 цифры и 2 буквы для почтового_кода (может быть в нижнем или верхнем регистре). Если params_for будет проходить через набор изменений, впоследствии все будет в верхнем регистре. Почему этот тест в настоящее время не работает?

Сообщение об ошибке: Expected truthy, got nil

У меня есть модель компании с этим набором изменений:

def changeset(company, params \\ %{}) do
  company
  ...
  |> maybe_sanitize_postal_code(:postal_code)
  ...
end

defp maybe_sanitize_postal_code(changeset, attr) do
  case get_change(changeset, attr) do
    nil -> changeset
    postal_code -> put_change(changeset, attr, sanitize_postal_code(postal_code))
  end
end

defp sanitize_postal_code(postal_code) do
  postal_code
  |> String.replace(~r/\s+/, "")
  |> String.upcase()
end

У меня есть этот тест:

test "create company with postal code", %{conn: conn, user: user} do
  params = params_for(:company)
  conn = post conn, company_path(conn, :create), company: params
  assert json_response(conn, 201)["company"]["id"]
  company = Repo.get_by(Company, params)
  assert company
  assert [user] == Repo.all Ecto.assoc(company, :users)
  ...
end

params_for docs: https://hexdocs.pm/ex_machina/ExMachina.Ecto.html#c:params_for/2


person Robert    schedule 12.09.2017    source источник
comment
Что такое params_for и какое точное сообщение об ошибке при сбое теста?   -  person Dogbert    schedule 12.09.2017
comment
Добавлена ​​ссылка params_for docs (создание компании с фейковыми данными). Добавлено сообщение об ошибке в вопросе.   -  person Robert    schedule 12.09.2017


Ответы (1)


если params содержит postal_code в нижнем регистре, набор изменений увеличивает регистр. Однако Repo.get_by(Company, params) по-прежнему ищет почтовый индекс в нижнем регистре, возвращая nil

person Toby Hinloopen    schedule 12.09.2017