0

使用 Ecto 2.0 我试图通过这个测试:

defmodule PlexServer.FleetInstanceTest do
  use PlexServer.ModelCase

  alias PlexServer.FleetInstance

  @invalid_attrs %{some_random_data: "random data"}

  test "changeset with invalid attributes" do
    changeset = FleetInstance.changeset(%FleetInstance{}, @invalid_attrs)
    refute changeset.valid?
  end
end

这是模型

defmodule PlexServer.FleetInstance do
  use PlexServer.Web, :model

  schema "fleet_instances" do
    has_many :ship_instance, PlexServer.ShipInstance

    timestamps
  end

  def changeset(model, params \\ %{}) do
    model
      |> cast(params, [])
      |> validate_required([])
  end
end

似乎 cast 只是忽略了任何不在允许列表中的数据,因此变更集被认为是有效的,没有通过测试。

4

1 回答 1

1

是的,Ecto.Changeset.cast/3将忽略第三个参数中未指定的任何字段,并且当您传递[]validate_required时,实际上不可能params使您当前版本的PlexServer.FleetInstance.changeset/2return valid?: false

于 2016-06-22T16:43:30.307 回答