我正在尝试测试数据库中的唯一性,但遇到了一些麻烦。我运行了此迁移:
def change do
create table(:signups) do
add :name, :string
add :email, :string
timestamps()
end
create unique_index(:signups, [:email])
end
Run Code Online (Sandbox Code Playgroud)
在我的模型中有这个changeset def:
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :email])
|> validate_required([:name, :email])
|> validate_format(:email, ~r/@/)
|> update_change(:email, &String.downcase/1)
|> unique_constraint(:email)
end
Run Code Online (Sandbox Code Playgroud)
而失败的测试是:
test "duplicate email changeset is invalid" do
%Signup{}
|> Signup.changeset(@valid_attrs)
|> Repo.insert!
user2 = %Signup{}
|> Signup.changeset(@valid_attrs)
assert {:error, _changeset} = Repo.insert(user2)
end
Run Code Online (Sandbox Code Playgroud)
第二个插入似乎通过了,尽管它没有通过。返回的确切错误是:
1) test duplicate email changeset is invalid (EventSignup.SignupTest)
test/models/signup_test.exs:24
match (=) …Run Code Online (Sandbox Code Playgroud)