Ruby on rails 电子邮件以.edu验证和rspec结尾

Ruby on rails 电子邮件以.edu验证和rspec结尾,ruby-on-rails,regex,rspec,Ruby On Rails,Regex,Rspec,在Hartl的教程中,我看到了以下RSpec代码 describe "when email format is invalid" do it "should be invalid" do addresses = %w[user@foo,com user_at_foo.org example.user@foo. foo@bar_baz.com foo@bar+baz.com] addresses.each do |inva

在Hartl的教程中,我看到了以下RSpec代码

 describe "when email format is invalid" do
    it "should be invalid" do
      addresses = %w[user@foo,com user_at_foo.org example.user@foo.
                     foo@bar_baz.com foo@bar+baz.com]
      addresses.each do |invalid_address|
        @user.email = invalid_address
        expect(@user).not_to be_valid
      end
    end
  end

  describe "when email format is valid" do
    it "should be valid" do
      addresses = %w[user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp a+b@baz.cn]
      addresses.each do |valid_address|
        @user.email = valid_address
        expect(@user).to be_valid
      end
    end
  end
第一个是测试无效电子邮件,第二个是测试有效电子邮件。我理解大部分呈现给我的内容,但现在我想对其进行调整,以便只接受以.edu结尾的电子邮件。我想到了几个问题:

  • 为什么有有效和无效两种测试?没有通过有效测试的测试不是无效的吗,反之亦然

  • 我看到在有效测试中,它们是有效的,因为它们遵循一些“普通电子邮件”惯例。我能简单地用.edu替换.com和.org来实现我的目标吗


  • 我知道与.edu规则相关的正则表达式,但我真的很想学习RSPec,而不仅仅是慢慢地学习它。如有任何建议,将不胜感激

    对于以edu结尾的电子邮件,您需要将以下正则表达式添加到user.rb模型中

    大概是这样的:

    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+edu)\z/i
    
  • 为什么有有效和无效两种测试?难道没有任何测试吗 不通过有效的测试将无效,反之亦然
  • 编写测试时应牢记rspec是有效的。使用未验证的值创建用户对象时。保存时的对象返回false。Rspec检查保存时是否有任何错误

    你也可以这样做

    创建用户的对象

    @user = User.new
    
    假设您的用户模型中有:

    validates :email, :presence => true
    
    然后尝试保存此
    @user

    @user.save
    
    它救不了你。您可以通过以下方式检查错误:

    @user.errors
    
  • 我看到在有效测试中,它们是有效的,因为 “普通电子邮件”惯例。可以简单地替换.com和.org 用.edu来实现我的目标
  • 这与电子邮件会议无关。它是关于用户模型中的正则表达式或验证的

  • 您发布的代码是测试代码,而不是验证函数。它需要测试验证函数是否传递有效地址并拒绝无效地址。如果只进行了一组测试,则无法同时确认这两种行为。例如,如果验证函数只是为任何输入返回
    true
    ,而您只执行了when email format is valid测试,您就不会知道它从不拒绝无效的电子邮件

  • 更改模型,使其仅认为
    .edu
    地址有效,并且您希望对其进行测试后,应将所有非edu地址移动到“当电子邮件格式无效”块中的列表中,并将一些.edu地址添加到“当电子邮件格式有效”块中


  • 您需要测试验证功能是否正确地传递有效电子邮件,以及是否正确地拒绝无效电子邮件。因此,您需要两个测试。您的用户模型中现有的正则表达式是什么?