如何使无效属性测试通过零允许或必需属性
How do I make an invalid attributes test pass with zero allowed or required attributes
我正在使用 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
似乎强制转换忽略了任何不在允许列表中的数据,因此变更集被认为是有效的,测试失败。
是的,Ecto.Changeset.cast/3
将忽略第三个参数中未指定的任何字段,并且当您将 []
传递给 validate_required
时,确实不可能 params
将使您当前版本的 PlexServer.FleetInstance.changeset/2
return valid?: false
.
我正在使用 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
似乎强制转换忽略了任何不在允许列表中的数据,因此变更集被认为是有效的,测试失败。
是的,Ecto.Changeset.cast/3
将忽略第三个参数中未指定的任何字段,并且当您将 []
传递给 validate_required
时,确实不可能 params
将使您当前版本的 PlexServer.FleetInstance.changeset/2
return valid?: false
.