1

基本モデルを作成し、それらの関連付けと、関連付けられたテーブルを作成するための移行を定義しました。

編集-私が特にテストしたいものに重点を追加します。

テストできるようにしたい:

  • アソシエーションは意図したとおりに構成されています
  • テーブル構造は、関連付けを適切にサポートします

テストデータの完全なセットがあることを見越して、すべてのモデルのFGファクトリを作成しましたが、belongs_toとhas_manyの両方の関連付けをテストするための仕様を作成する方法を理解できません。

たとえば、has_many Usersを持つ組織がある場合、サンプル組織にサンプルUserへの参照があることをテストできるようにします。

Organization_Factory.rb:

Factory.define :boardofrec, :class => 'Organization' do |o|
  o.name 'Board of Recreation'
  o.address '115 Main Street'
  o.city 'Smallville'
  o.state 'New Jersey'
  o.zip '01929'
end

Factory.define :boardofrec_with_users, :parent => :boardofrec do |o|
  o.after_create do |org|
    org.users = [Factory.create(:johnny, :organization => org)]
  end
end

User_Factory.rb:

Factory.define :johnny, :class => 'User' do |u|
  u.name 'Johnny B. Badd'
  u.email 'jbadd@gmail.com'
  u.password 'password'
  u.org_admin true
  u.site_admin false
  u.association :organization, :factory => :boardofrec
end

Organization_spec.rb:

...
  it "should have the user Johnny B. Badd" do
    boardofrec_with_users = Factory.create(:boardofrec_with_users)
    boardofrec_with_users.users.should include(Factory.create(:johnny))
  end
...

Organization.usersリストと比較User:johnnyは同じファクトリの別個のインスタンスであるため、この例は失敗します。

これは、これらのプラグイン(FG、rspec)が対象としているように見えるものの背後にあるBDDのアイデアに従わないことを認識していますが、これが私の最初のRailsアプリケーションであるため、関連付けとテーブルを構成したことを知らずに前進するのは不快です。適切に構造化します。

4

1 に答える 1

2

ユーザーファクトリは、ファクトリガールassociationメソッドによってすでに組織を作成しています。

it "should associate a user with an organization" do
  user = Factory.create(:johnny)
  user.organization.name.should == 'Board of Recreation'

  organization = user.organization
  organization.users.count.should == 1
end

仕様を実行した後、「log/test.log」を確認してください。組織とユーザーの両方のINSERTが表示されます。

Factory Girlアソシエーションなしでこれをテストしたい場合は、ユーザーを作成するだけのファクトリを作成し、仕様でアソシエーションを作成します。

it "should associate a user with an organization" do
  user = Factory.create(:johnny_no_org)
  org = Factory.create(:boardofrec)
  org.users.should be_empty
  org.users << user
  org.users.should include(user)
end

もちろん、これが行っているのは、ActiveRecordがその仕事をしているかどうかをテストすることだけです。ActiveRecordはすでに徹底的にテストされているので、フレームワークが実際に想定どおりに機能することを確認したら、アプリケーションの機能のテストに集中する必要があります。

于 2010-04-25T04:10:55.880 に答える