2014-10-08 153 views
0

在試圖將Factory Girl合併到我的項目中時,我遇到了一個我似乎無法解決的錯誤。我寫了一個測試,將檢查如果我的用戶名是空的:嘗試使用Factory Girl運行Rspec時測試失敗

# spec/models/user_spec.rb 

require 'rails_helper' 

RSpec.describe User, :type => :model do 
    it 'is invalid without a first name' do 
    user = FactoryGirl.build(:user, first_name: nil) 
    expect(user).to have(1).errors_on(:first_name) 
    end 
end 

Unfortnately當我嘗試運行這個測試,我得到這個錯誤:

1) User is invalid without a first name Failure/Error: expect(user).to have(1).errors_on(:first_name) expected 1 errors on :first_name, got 2 # ./spec/models/user_spec.rb:7:in `block (2 levels) in '

這裏就是我的factories.rb文件的樣子:

# spec/factories.rb 

FactoryGirl.define do 
    factory :user do 
    first_name "John" 
    last_name "Doe" 
    sequence(:email) {|n| "johndoe#{n}@example.com"} 
    password "secret" 
    end 
end 

如果有幫助的一切都在這裏是我的Gemfile是如何設置:

group :development, :test do 
    gem 'rspec-rails' 
    gem 'rspec-collection_matchers' 
    gem 'factory_girl_rails' 
end 

更新

檢查我的用戶模型後,我相信,第二個錯誤是我錯誤地設置存在確認兩次在我的模型:

validates :first_name, :last_name, :email, :password, presence: true 
validates :first_name, :last_name, presence: true, format: {with: /\A([^\d\W]|[-])*\Z/, message: 'cannot have any numbers or special characters'} 

我現在不知道是rspec的一種方式莫名其妙地指出我處理的,而不是含糊地告訴我的錯誤:

expected 1 errors on :first_name, got 2

回答

0

看來你的用戶實際上有2兒是first_name場

RORS要調試它,你可以只打印錯誤

RSpec.describe User, :type => :model do 
    it 'is invalid without a first name' do 
    user = FactoryGirl.build(:user, first_name: nil) 

    puts user.errors.messages[:first_name] 

    expect(user).to have(1).errors_on(:first_name) 
    end 
end 
+0

所以,檢查我的用戶模型,我認爲第二個錯誤是我錯誤地設置存在確認兩次在我的模型。在我的測試中奇怪地使用'puts user.errors.messages [:first_name]'給了我和以前一樣的確切錯誤信息。如果更正,這個答案可能會對其他用戶有用。我會更新我的問題以反映它,並在修改後標記爲正確。 – 2014-10-09 00:11:09