2012-03-23 58 views
1

我是使用RSpec和FactoryGirl的新手。我正在嘗試將RSpec測試添加到現有的代碼庫中。當RSpec使用FactoryGirl時關聯工廠的驗證錯誤

我有以下定義工廠:

Factory.sequence :email do |n| 
    "somebody#{n}@example.com" 
end 

Factory.sequence :login do |n| 
    "inquire#{n}" 
end 

Factory.define :user do |f| 
    f.login { Factory.next(:login) } 
    f.email { Factory.next(:email) } 
    f.password 'inquire_pass' 
    f.password_confirmation 'inquire_pass' 
    f.first_name 'test' 
    f.last_name 'guy' 
    f.newsletter true 
    f.notify_of_events true 
    f.terms_of_service true 
end 

Factory.define :project do |project| 
    project.title    "Example Project Title" 
    project.association   :user 
    project.association   :provider 
    project.association   :project_request 
    project.association   :offering 
    project.association   :offering_type 
end 

當我嘗試但創建在我的測試項目的工廠,並將其分配給@project:

require 'spec_helper' 

describe Charge do 
    before(:each) do 
     @provider_user = Factory(:user) 
     @provider = stub_model(Provider, :user => @provider_user) 
     @user = Factory(:user) 
     @project_request = stub_model(ProjectRequest) 
     @project = Factory(:project, :user => @user, :provider => @provider, :offering_fixed_fee_number => 700, 
            :project_request_id => @project_request.id) 
     @attr = { 
      :user_id => @user.id, 
      :provider_id => @provider.id, 
      :charge_client => "0.01" 
     } 
     @charge = @project.build_charge(@attr) 
    end 

我得到一個錯誤信息當運行指示相關用戶的驗證失敗的測試時:

Validation failed: User email can't be blank, User email is too short (minimum is 3 characters), User email does not look like a valid email address., Login can't be blank 

個的用戶模型相關的驗證是:

validates_presence_of  :login, :email 
    validates_uniqueness_of :login, :email, :case_sensitive => false 

    validates_length_of  :login, :within => 5..20 
    validates_format_of  :login, :with => /^[a-z0-9-]+$/i, :message => 'may only contain letters, numbers or a hyphen.' 

    validates_length_of  :email, :within => 3..100 
    validates_format_of  :email, :with => Authentication.email_regex, :message => 'does not look like a valid email address.' 

我能夠(通過本身),沒有問題,創建有效的用戶工廠。但是,當我嘗試創建具有用戶關聯的項目,並將關聯的用戶指定爲我之前創建的工廠用戶時,該用戶的驗證失敗。任何想法,我在這裏失蹤?

非常感謝,

院長理查森

回答

0

也許是因爲factory PARAM在association方法丟失:

Factory.define :project do |project| 
    project.association :user, :factory => :user 
    ... 
end 

但在這種情況下,它可以更容易寫成:

Factory.define :project do |project| 
    project.user 
    ... 
end 

請參閱Factory Girl. Getting Started

相關問題