为什么将user.name设置为空字符串? (Hartl rails book)

时间:2016-05-20 00:08:25

标签: ruby-on-rails

test "email should be present" do
    @user.email = " "
    assert_not @user.valid?
    end

我没有真正得到这个测试,尤其是第2行。我假设是assert_not @ user.valid?与assert!@ user.valid相同?但我想他认为前者更容易阅读。

3 个答案:

答案 0 :(得分:1)

我猜测,对于此测试,您的用户模型中还有一个状态验证(presence: true),用于电子邮件和用户名称。这就是@user.email = " "设置为空字符串的原因;根据验证状态条件,用户现在无效。旁注:这实际上是在调用空白方法。

是的,你是对的,assert_not @user.valid?assert !@user.valid?会返回相同的内容。这一行的含义是,如果对象为假,assert_not @user.valid?通过,即用户无效。

所以基本上,它说的是"好吧,因为这个人有一个空白(无效)的电子邮件,我们正在测试以确保他也应该是一个无效的用户"。因此,测试的目的是确保任何拥有空白电子邮件的用户都不是有效用户。

答案 1 :(得分:0)

电子邮件设置为"空"字符串,以使@user对象无效,从而使测试通过。

我当然假设email属性是User的必填字段。有了这个假设,即使电子邮件地址为空,如果user仍然有效,测试也会失败。

答案 2 :(得分:0)

此测试的目的是确保User模型的用户对象无效,除非设置了email属性。

为此,我们故意将email实例变量的@user属性设置为" ",或为空,从而使@user无效。 现在@user.valid?返回false,因为user.rb文件中有以下行:

validates :email, presence: true

你绝对正确地说assert !@user.valid?assert_not @user.valid?相同。您可以使用它们来测试相同的行为。