2

私のfactories.rbファイルで次のファクトリが定義されています。

require 'factory_girl'

FactoryGirl.define do
    sequence(:email) {|n| "person-#{n}@example.com" }

    factory :country do
        ...
    end
    factory :state do
        country
        ...
    end
    factory :school do
        name "Test School"
        country
        state
    end
    factory :user do
        school
        email
        ... 
    end
end

rspecでテストするFactoryGirl.create(:school)と、記述子の1つを呼び出すと、「TestSchool」という名前の2つの学校が作成されます。

factorys.rbで定義されているファクトリは、保存されていないインスタンスオブジェクトの集まりにすぎないと思いましたが、なぜこの問題が発生しているのかを誰かが明確にできますか?

正確なrspecは次のとおりです。

require 'spec_helper'
describe "school login" do
  it "displays a success message upon successful login to school",do  
    school = FactoryGirl.create(:school)
    user = FactoryGirl.create(:user, :username => "jdoe")
    School.all.each do |school|
      puts school.name #2x => "Test School"
    end
    visit school_path(user.school)
    click_link('login')
    fill_in "username", :with => "jdoe"
    fill_in "password", :with => "secret"
    click_button "Sign in"
    expect(page).to have_selector(".alert-success")
  end
end
4

2 に答える 2

2

この行は最初の学校を作成します

school = FactoryGirl.create(:school)

そしてこれは2番目です:

user = FactoryGirl.create(:user, :username => "jdoe")

これは、ユーザー ファクトリで、すべてのユーザーに学校が必要であると定義したため、FactoryGirl が学校を作成するために発生します。ユーザーを最初の学校に関連付けるには、次のようにします。

user = FactoryGirl.create(:user, :username => "jdoe", :school => school)
于 2012-12-31T23:39:22.390 に答える
0

コンテキストコードは何ですか?schoolsそして、どのようにして2つ作成され ていることがわかりましたか?

ruby ファイル ( factory ) に記述されたコードは、create(:object)orを宣言するまで、データベースに保存されることも、オブジェクトとして作成されることもありませんbuild(:object)

# Returns a User instance that's not saved
user = FactoryGirl.build(:user)

# Returns a saved User instance
user = FactoryGirl.create(:user)

詳細については、https ://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#using-factories を参照してください。

于 2012-12-31T22:54:59.800 に答える