2012-03-23 2 views
1

RSpecとFactoryGirlを初めて使用しました。私はRSpecテストを既存のコードベースに追加しようとしています。RSpecでFactoryGirlを使用する場合、関連する工場での検証エラー

私が定義されている以下の工場があります。私はしかし、私のテストでは、プロジェクトの工場を作成し、@projectするためにそれを割り当てるしようとすると

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 

を:

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.' 

問題なく有効なユーザーファクトリ(それ自体で)を作成できます。しかし、私がUserアソシエーションを持つプロジェクトを作成しようとしたとき、以前作成した工場ユーザーとして関連付けられたUserを指定すると、そのユーザーの検証は失敗します。私がここで紛失しているアイデアは何ですか? association方法でfactory paramは欠落しているため、

おかげで非常に多く、

ディーン・リチャードソン

答えて

0

は、多分それはです:

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

しかし、この場合には、より簡単に記述できます。

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

Factory Girl. Getting Started

関連する問題