Phoenix 1.3 默认生成器 // naive_datetime 问题

Phoenix 1.3 default generators // naive_datetime problems

运行 mix phx.gen.json Object Item items published_at:native_datetime 输出以下 files/tests :

迁移:

defmodule App.Repo.Migrations.CreateItems do
  use Ecto.Migration

  def change do
    create table(:items) do
      add :published_at, :naive_datetime
      timestamps()
    end

  end
end

测试夹具:

  @update_attrs %{ published_at: ~N[2011-05-18 15:01:01.000000] }

更新断言:

assert json_response(conn, 200)["data"] == %{
        "published_at" => ~N[2011-05-18 15:01:01.000000] }

失败并显示以下内容:

code:  assert json_response(conn, 200)["data"] == %{"published_at" => ~N"2011-05-18 15:01:01.000000",}
left:  %{"published_at" => "2011-05-18T15:01:01.000000"}
right: %{"published_at" => ~N[2011-05-18 15:01:01.000000]}

用纯 "stringified" 时间戳替换 ~N[..] 值,测试通过。为了使其与定义的列类型一起使用,应用什么默认更改?

两件事:

  1. assert has it’s own handler为匹配运算符=,使用它;
  2. 您应该从您的字符串构造 NaiveDateTime 结构(反之亦然)。

assert %{"published_at" => ~N[2011-05-18 15:01:01.000000]} =
       conn
       |> json_response(200)["data"]
       |> NaiveDateTime.from_iso8601!()

assert %{"published_at" => "2011-05-18T15:01:01.000000"} =
       json_response(conn, 200)["data"]