0

followed_id2 つの属性を含むリレーションシップ モデルのファクトリを作成したいのですfollower_idが、これを行う方法がわかりません。これは私のファクトリ ファイルです。

FactoryGirl.define do

  factory :user do
    sequence(:name)  { |n| "Person #{n}" }
    sequence(:email) { |n| "person_#{n}@example.com"}
    password "foobar"
    password_confirmation "foobar"
  end

  factory :relationship do
    # i need something like this
    # followed_id a_user.id
    # follower_id another_user.id
  end

end

アップデート

このリレーションシップ ファクトリでやりたいことは、ユーザーを破棄すると、ユーザーのリレーションシップもすべて破棄されることをテストすることです。これが私のテストです。

describe "relationships associations" do

let!(:relationship) { FactoryGirl.create(:relationship) }
it "should destroy associated relationships" do
  relationships = @user.relationships.to_a
  @user.destroy
  expect(relationships).not_to be_empty
  relationships.each do |relationship|
    expect(Relationships.where(id: relationship.id)).to be_empty
  end
end

終わり

4

3 に答える 3

0

FactoryGirl の最近のバージョンでは、次のことができるはずです。

factory :relationship do
  association :followed, :factory => :user
  association :follower, :factory => :user
end

これらの 2 つの行のそれぞれが行うことは、ユーザー インスタンスを (ファクトリassociationを使用して) セットアップし、現在の関係インスタンスに割り当てるか、そのインスタンスを割り当てることです。:userfollowedfollower

アソシエーション名とファクトリ名が同じでない限り、ファクトリを指定する必要があることに注意してください。

アップデート:

リレーションシップを作成するときは、:followedまたは:follower(該当する方) を指定します。それ以外の場合は、それらのそれぞれに対して新しいユーザー レコードを作成し、それらを使用します。

FactoryGirl.create(:relationship, :followed => @user)
于 2013-09-21T12:02:53.213 に答える
0

私の経験では、そのような「関係」ファクトリーがテストで必要になることはめったにありません。代わりに、「user_with_followers」と「user_following_some_ones」がよく使用されます。

factory :user do
  sequence(:name)  { |n| "Person #{n}" }
  sequence(:email) { |n| "person_#{n}@example.com"}
  password "foobar"
  password_confirmation "foobar"

  factory :user_with_followers do
    ignore do
      followers_count 5
    end

    after_create do |user, evaluator|
      followers = FactoryGirl.create_list(:user, evaluator.followers_count)
      followers.each do |follower|
        follower.follow(user) # Suppose you have a "follow()" method in User
      end
  end

  factory :user_following_some_ones do
    # Do the similar
  end
end

# Use
FactoryGirl.create :user_with_followers
于 2013-09-20T14:59:38.800 に答える