3

私は罪を犯してきた間、ほぼ4年間レールを使用してきました。私は単一のテストを書いたことはありません。自分が犯してきた大きな過ちに気付くのになぜこれほど時間がかかったのかはわかりませんが、今はそうしています。開発を変えて、TDD の利用を開始したいと考えています。しかし、そのためには、現在取り組んでいるアプリケーションのテスト スーツを構築する必要があります。rspec と factory_girl のセットアップが完了し、少しずつ理解し始めています。テストしようとしているかなり複雑なモデルがいくつかあり、立ち往生しています。ここに私が持っているものがあります:

class BusinessEntity
  has_many :business_locations

class BusinessLocation
   belongs_to :business_entity
   has_many :business_contacts

   validates :business_entity_id, :presence => true

class BusinessContact
   belongs_to :business_location
   has_many :business_phones

   validates :business_location_id, :presence => true

class BusinessPhone
    belongs_to :business_contact

    validates :business_contact_id, :presence => true

これらのモデルではさらに多くのことが行われていますが、これが私がこだわっていることです。必要なすべての子を構築する business_entity のファクトリを作成するにはどうすればよいですか? したがって、仕様ファイルでは、FactoryGirl.create(:business_entity) だけを使用して、これを他のモデルのテストに使用できます。私はこの工場を持っています

    require 'faker'

FactoryGirl.define do
  factory :business_entity do
    name "DaveHahnDev"        
  end

  factory :business_location do
    name "Main Office"
    business_entity
    address1 "139 fittons road west"
    address2 "a different address"
    city { Faker::Address.city }
    province "Ontario"
    country "Canada"
    postal_code "L3V3V3"
  end

  factory :business_contact do
    first_name { Faker::Name.first_name}
    last_name { Faker::Name.last_name}
    business_location
    email { Faker::Internet.email}
  end

  factory :business_phone do
    name { Faker::PhoneNumber.phone_number}
    business_contact
    number_type "Work"
  end
end

これはこれを渡します

require 'spec_helper'


  it "has a valid factory" do
    FactoryGirl.build(:business_entity).should be_valid
  end

では、このファクトリを使用して、他の仕様テストで使用するすべての子を持つ business_entity を作成するにはどうすればよいでしょうか。

これが十分に明確であることを願っています。

4

1 に答える 1

2

私が正しく理解していれば、関連付けを作成する必要があります。FactoryGirls を使用してこれを行う最も基本的な方法は、別のファクトリ ブロックにファクトリ名を追加することです。したがって、あなたの場合は次のようになります。

# factories.rb

FactoryGirl.define do
  factory :business_entity do
    name "DaveHahnDev"        
  end

  factory :business_location do
    business_entity # this automatically creates an association
    name "Main Office"
    business_entity
    address1 "139 fittons road west"
    address2 "a different address"
    city { Faker::Address.city }
    province "Ontario"
    country "Canada"
    postal_code "L3V3V3"
  end

  factory :business_contact do
    business_location
    first_name { Faker::Name.first_name}
    last_name { Faker::Name.last_name}
    business_location
    email { Faker::Internet.email}
  end

  factory :business_phone do
    business_contact
    name { Faker::PhoneNumber.phone_number}
    business_contact
    number_type "Work"
  end
end

これらの行を追加した後、FactoryGirl.create(:business_location) を呼び出すことができます。これにより、新しい BussinessLocation レコードと BussinessEntity レコードが作成され、それらが関連付けられます。

詳細については、FactoryGirls Wiki - 協会を確認してください。

于 2012-11-10T02:10:05.093 に答える