簡體   English   中英

Rails代碼驗證有效,但Rspec測試失敗

[英]Rails code validation working but Rspec tests failing

誰能看到Rspec的問題嗎? 我所有對無效電子郵件的測試都失敗了(即,應該認為它們無效,但是在Rspec中是某種方式),但是在實際代碼中,它可以正常工作,不允許出現不良電子郵件。 驗證甚至可以在我的控制台中使用。

兩個注意事項:

  1. 我意識到格式不理想...以后會解決。 這只是我自己寫東西而沒有經過和干燥的事情。
  2. 我還意識到,存在一種更簡單的方法來單獨驗證模型中的這些內容,但是我想要非常自定義的消息,而無需任何引用該屬性,並且我不喜歡需要完成的回旋方式。

型號代碼

validate :create_validation, on: :create

def create_validation
    errors[:base] << "Please enter a valid email address to continue" if self.email.blank? || (( /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i =~ self.email) == nil) 
end
#The RegEx is from Michael Hartl's tutorial

規格代碼

describe Signup do

before do
    @signup = FactoryGirl.create(:signup)
end

    subject { @signup }

    describe "email tests" do
      describe "invalid tests" do 
        # blank email
        before { @signup.email = " " }
        it { should_not be_valid }

        # invalid format email
        addresses = %w[user@foo..com, user@foo,com user_at_foo.org example.user@foo. foo@bar_baz.com foo@bar+baz.com]
        addresses.each do |invalid_address|
          before { @signup.email = invalid_address }
          it { should_not be_valid }
        end
      end
    end
end

規范助手中的工廠女孩​​代碼

FactoryGirl.define do
  factory :signup do |f|
    f.email { Faker::Internet.email }
            #... other attributes
  end

結束

據我了解,您只能在創建時驗證代碼! 但是在測試中,您在before塊中創建了對象,並將其保留在測試中-因此跳過了驗證。

試試這個變體

describe Signup do

  before do
    @signup = FactoryGirl.build(:signup)
  end

  subject { @signup }

  describe "email tests" do
    describe "invalid tests" do 
      # blank email
      before { @signup.email = " " }

      it { should_not be_valid }

      # invalid format email
      addresses = %w[user@foo..com, user@foo,com user_at_foo.org example.user@foo. foo@bar_baz.com foo@bar+baz.com]
      addresses.each do |invalid_address|

        before { @signup.email = invalid_address }
        it { should_not be_valid }
      end
    end
  end
end

我希望將為已建立但未保存的記錄觸發驗證。

PS或者您可以刪除以下選項on: :create

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM