如何使用零允许或必需属性进行无效属性测试传递

时间:2016-06-22 16:36:56

标签: elixir ecto ex-unit

使用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

似乎强制转换忽略了任何不在允许列表中的数据,因此变更集被认为是有效的,无法通过测试。

1 个答案:

答案 0 :(得分:1)

是的,Ecto.Changeset.cast/3将忽略第三个参数中未指定的任何字段,并且当您将[]传递给validate_required时,真的不可能{{1}这将使您当前版本的params返回PlexServer.FleetInstance.changeset/2