Testing 困惑于为什么长生不老药体外验证测试不起作用

Testing 困惑于为什么长生不老药体外验证测试不起作用,testing,elixir,phoenix-framework,ecto,Testing,Elixir,Phoenix Framework,Ecto,我的用户模型如下所示: defmodule MyApp.User do 模式“用户”做什么 字段:名称,:字符串 字段:电子邮件,:字符串 字段:密码,:字符串,虚拟:真 字段:密码\u确认,:字符串,虚拟:真 时间戳 结束 @必填字段~w(姓名电子邮件) @可选_字段~w() def变更集(模型,参数\\:空)do 模型 |>强制转换(参数、@必填字段、@可选字段) |>验证长度(:密码,最小值:8) 结束 结束 这个测试确保了密码长度验证的有效性 defmodule MyApp.UserT

我的用户模型如下所示:

defmodule MyApp.User do
模式“用户”做什么
字段:名称,:字符串
字段:电子邮件,:字符串
字段:密码,:字符串,虚拟:真
字段:密码\u确认,:字符串,虚拟:真
时间戳
结束
@必填字段~w(姓名电子邮件)
@可选_字段~w()
def变更集(模型,参数\\:空)do
模型
|>强制转换(参数、@必填字段、@可选字段)
|>验证长度(:密码,最小值:8)
结束
结束
这个测试确保了密码长度验证的有效性

defmodule MyApp.UserTest do
使用MyApp.ModelCase
别名MyApp.User
别名MyApp.Repo
@有效属性%{
名称:“Uli Kunkel”,
电子邮件:“nihilist@example.com", 
}
@无效的_attrs%{}
测试“验证密码的长度是否正确”执行
attrs=@valid_attrs |>Map.put(:password,“1234567”)
变更集=%User{}|>User.changeset(attrs)
assert{:error,changeset}=Repo.insert(changeset)
结束
结束

只有测试失败,即使密码太短。我遗漏了什么?

创建变更集时,您拒绝了
密码
字段。 这样就不会触发该字段上的验证


您需要将
密码
添加到
@必填字段
@可选字段
列表中。

啊,就是这样!非常感谢。我之前用IEx.pry查看了变更集,在params部分看到了密码值,然后感到困惑。现在我再次查看它,我可以看到它是如何包含在参数中的,而不是更改。有趣。我相信这会再次伤害我是的,我们需要找到一种方法来警告是否已将某个字段提供给变更集但未使用。我也遇到了同样的问题。。我已经在
@必填字段中添加了
密码
,并且也添加了这个
>验证长度(:password,min:6)
,但仍然没有运气。。密码仍作为正确密码传递
1