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

キャストは、許可されたリストにないデータを単に無視するように見えるため、チェンジセットは有効であると見なされ、テストに失敗します。

4

1 に答える 1

1

はい、Ecto.Changeset.cast/33 番目の引数で指定されていないフィールドはすべて無視されます。また、に渡し[]ているため、現在のバージョンのreturnを作成するvalidate_required可能性は実際にはありません。paramsPlexServer.FleetInstance.changeset/2valid?: false

于 2016-06-22T16:43:30.307 に答える