3

私は次の仕様を持っています:

  it "saves a default 'active' status if not specified" do
    if User.count <= 0
      user = User.new(FactoryGirl.attributes_for(:user))
      user.save
    end

    project = FactoryGirl.create(:project, :status => nil)
    project.status.should eq("active")
  end

このFactoryGirlオブジェクトを使用して:

  factory :project do
    title "A short title"
    description "A short description"
    parent_id 1
    pm_id 1
    status "active"
  end

プロジェクトのモデルは、関連付けの存在を検証します...したがって、テストする前に、テストデータベース内にユーザーを保存したいと思います。ただし、上記のコードはDBに何も保存しません。

代わりに、before(:all)ブロックを追加すると:

before(:all)do @user = User.new(FactoryGirl.attributes_for(:user))@ user.save end

新しいユーザーがデータベースに保存されます。なんで?

4

1 に答える 1

2

モデルでプロジェクトがUserに属している場合は、プロジェクトを作成するときにファクトリーガールにユーザーを作成させることができます。プロジェクトファクトリを次のように更新するだけです。

factory :project do
    title "A short title"
    description "A short description"
    parent_id 1
    pm_id 1
    status "active"
    user
end

これは、上記のコードと同じ効果があると思います。

次に、上記のコードでは、プロジェクトをユーザーに関連付けているようには見えません。(もちろん、pm_idもparent_idもユーザーを参照していないと仮定します。その場合、IDについて推測せず、代わりに上記の方法を使用することをお勧めします:-)

于 2012-06-17T16:14:58.760 に答える