2013-12-11 57 views
0

晚上好老鄉編碼器,Rspec的驗證測試的更新

我慢慢設法和交手Rspec的大部分我的驗證發生在創建用戶後,你可以從下面的驗證看,這裏是整個驗證部分到目前爲止。

#validations for common attributes 

validates :email, presence: true, on: :create, uniqueness: true, 
      :format => /@/ 
validates :password, presence: true, on: :create, length: {minimum: 6} 

#validations blocks for dev 

with_options :if => lambda { |o| o.role_type == "developer" } do |dev| 
    dev.validates :first_name, presence: true, on: :update 
    dev.validates :last_name, presence: true, on: :update 
    dev.validates :languages, presence: true, on: :update 
    dev.validates :dev_desc, presence: true, on: :update 
    dev.validates :github, presence: true, on: :update, 
       :format => URI::regexp(%w(http https github)) 
    dev.validates :stackoverflow, presence: true, on: :update, 
       :format => URI::regexp(%w(http https stackoverflow)) 
    dev.validates :level, presence: true, on: :update 
    dev.validates :street, presence: true, on: :update 
    dev.validates :city, presence: true, on: :update 
    dev.validates :state, presence: true, on: :update 
    dev.validates :postcode, presence: true, on: :update 
end 

#validations block for employer 

with_options :if => lambda { |o| o.role_type == "employer" } do |e| 
    e.validates :company_name, presence: true, on: :update, 
       uniqueness: true 
    e.validates :employer_desc, presence: true, on: :update 
    e.validates :area_of_focus, presence: true, on: :update 
    e.validates :number_of_employees, presence: true, on: :update 
e.validates :street, presence: true, on: :update 
e.validates :city, presence: true, on: :update 
e.validates :state, presence: true, on: :update 
e.validates :postcode, presence: true, on: :update 
end 

現在我有我目前的測試,下面是失敗的:如果他們不是完全有效的

it "should not be valid with blank firstname" do 
     dev.first_name = ' ' 
     dev.should_not be_valid 
    end 

用戶被重定向到編輯頁面。我不明白爲什麼它不通過。我扭轉它,並將其更改爲應通過測試

可能有人也許解釋了爲什麼它的傳球,這裏是用於開發該塊:

let(:dev) { FactoryGirl.create :dev } 

更新:這裏是我的工廠,不知道這將如何影響錯誤:

factory :dev, class: User do 
    first_name { Faker::Name.first_name } 
    last_name { Faker::Name.last_name } 
    email { Faker::Internet.email } 
    password "12345678" 
    password_confirmation "12345678" 
    role_type "Developer" 
    dev_desc "New to development but trying to help the community" 
    github "www.github.com" 
    stackoverflow "www.stackoverflow.com" 
    languages "Rails" 
    level  "Junior" 
    street {Faker::Address.street_address} 
    city  {Faker::Address.city} 
    state {Faker::Address.state} 
    postcode {Faker::Address.zip_code} 
end 

感謝您的幫助,試圖瞭解這一點,因爲驗證在註冊後可以手動使用。

+0

我仍然看不到你得到什麼錯誤 –

回答

1

first_name的驗證是有條件的role"developer",但你的工廠設置role"Developer",所以驗證沒有被應用。

0

更改您的驗證,以

dev.validates :first_name, presence: true, allow_blank: => false, on: :update 

默認情況下,存在驗證允許空值

+0

它仍然在我的測試失敗。 –