加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Rspec测试无效的电子邮件

发布时间:2020-12-17 03:28:56 所属栏目:百科 来源:网络整理
导读:这来自 Learn Rails by example book: 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| @u
这来自 Learn Rails by example book:

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
        @user.should_not be_valid
      end      
    end

我是Rspec的初学者.以前,有一个这样的代码:

describe "when email is not present" do
    before { @user.email = " " }
    it { should_not be_valid }
  end

所以我想知道为什么作者没有像这样编写上面的代码:

describe "when email format is invalid" do
    before do
      addresses = %w[user@foo,com user_at_foo.org example.user@foo.
                     foo@bar_baz.com foo@bar+baz.com]
      @user.email = invalid_address 
      addresses.each do |invalid_address|
        @user.email = invalid_address
      end 
    end

    it { should_not be_valid }          
 end

好吧,也许这段代码错了.但基本上,我问的是为什么作者之前没有使用它或者在它之前放置地址变量? (正如他在前一个例子中所做的那样)

编辑:

他还在另一个例子中做了类似的事情:

describe "when email address is already taken" do
    before do
      user_with_same_email = @user.dup
      user_with_same_email.email = @user.email.upcase
      user_with_same_email.save
    end

    it { should_not be_valid }
  end

解决方法

答案在于前块实际上在做什么.在这些测试中,它在运行之前完全运行.

因此,第一个代码块运行(并且可以编写)为:

@user.email = 'user@foo,com'
@user.should_not be_valid
@user.email = 'user_at_foo.org'
@user.should_not be_valid
@user.email = 'example.user@foo.'
@user.should_not be_valid
@user.email = 'foo@bar_baz.com'
@user.should_not be_valid
@user.email = 'foo@bar+baz.com'
@user.should_not be_valid

并且第二个代码块运行(并且可以编写)为:

@user.email = ' '
@user.should_not be_valid

但是第三个块会在到达它之前遍历整个数组,结果只有:

@user.email = 'foo@bar+baz.com'
@user.should_not be_valid

在最后一个例子中,他正在对同一个对象执行一系列操作,这些操作在它之前进行评估,只需要运行一次就可以了.

希望这有帮助,祝你好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读