Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails测试获胜';具有唯一性的t传递:{区分大小写:false}集_Ruby On Rails_Ruby On Rails 3_Unit Testing_Testing - Fatal编程技术网

Ruby on rails Rails测试获胜';具有唯一性的t传递:{区分大小写:false}集

Ruby on rails Rails测试获胜';具有唯一性的t传递:{区分大小写:false}集,ruby-on-rails,ruby-on-rails-3,unit-testing,testing,Ruby On Rails,Ruby On Rails 3,Unit Testing,Testing,在我的user.rb模型中,我有: validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } validates :email, presence: true, format: { with: VALID_EMAIL

在我的user.rb模型中,我有:

validates :email, presence: true, 
                  format: { with: VALID_EMAIL_REGEX },
                  uniqueness: { case_sensitive: false }
 validates :email, presence: true, 
                      format: { with: VALID_EMAIL_REGEX },
                      uniqueness: { case_sensitive: false }
我有以下测试:

test "email address uniqueness regardless of case" do
    dup_user = User.new(name: "First Last", email: @user.email.upcase)
    dup_user.save
    assert !@user.valid?
end
而那个测试不会通过。我也试过,
assert@user.save.valid?
认为它在保存时会失败,但这也不起作用


我做错了什么?

以下是我最后做的事情:

在我的user.rb模型中,我有:

validates :email, presence: true, 
                  format: { with: VALID_EMAIL_REGEX },
                  uniqueness: { case_sensitive: false }
 validates :email, presence: true, 
                      format: { with: VALID_EMAIL_REGEX },
                      uniqueness: { case_sensitive: false }
我有以下测试和设置:

def setup
    @user = User.new(name: "John Doe", email: "example@example.com",
             password: "foobar", password_confirmation: "foobar")
    @user.save 
end

test "email address uniqueness regardless of case" do
  dup_user = User.new(name: "First Last", email: @user.email.upcase)
  assert !dup_user.save
end

简言之,我所做的是传递一个用户对象,将其求值为true,而不是save块。如果执行object.save.valid?您不是询问保存是否有效,而是询问对象。save返回了一个有效的对象,该对象是从object.save返回的。save为false(而不是对象)。

以下是我最后要做的:

在我的user.rb模型中,我有:

validates :email, presence: true, 
                  format: { with: VALID_EMAIL_REGEX },
                  uniqueness: { case_sensitive: false }
 validates :email, presence: true, 
                      format: { with: VALID_EMAIL_REGEX },
                      uniqueness: { case_sensitive: false }
我有以下测试和设置:

def setup
    @user = User.new(name: "John Doe", email: "example@example.com",
             password: "foobar", password_confirmation: "foobar")
    @user.save 
end

test "email address uniqueness regardless of case" do
  dup_user = User.new(name: "First Last", email: @user.email.upcase)
  assert !dup_user.save
end

简言之,我所做的是传递一个用户对象,将其求值为true,而不是save块。如果执行object.save.valid?您不是询问保存是否有效,而是询问对象。save返回了一个有效对象,而object.save返回的是false(而不是object)。

您应该检查dup\u用户是否有效

test "email address uniqueness regardless of case" do
    dup_user = User.new(name: "First Last", email: @user.email.upcase)
    assert ! dup_user.valid?
end

您应该检查dup\U用户是否有效

test "email address uniqueness regardless of case" do
    dup_user = User.new(name: "First Last", email: @user.email.upcase)
    assert ! dup_user.valid?
end

啊,接得好!从我下面的回答中可以看出,我对它做了一些修改。你认为哪一个更好?我的回答省去了访问数据库的时间。使您的测试更快。另外,
save
已经运行了
valid?
。啊,捕捉得好!从我下面的回答中可以看出,我对它做了一些修改。你认为哪一个更好?我的回答省去了访问数据库的时间。使您的测试更快。而且
save
已经运行
valid?