6

開発中に Rails コンソールを起動すると、FactoryGirl がオブジェクトを作成しているのが見えます。明らかに私は間違っていますが、これを行う正しい方法は何ですか? このコードは私のテストを機能させます...

# tests/factories/board.rb
FactoryGirl.define do

    factory :word do
        sequence(:text) { |n| "FAKETEXT#{n}" }
    end

    factory :board do
        trait :has_words do
            words [
                FactoryGirl.create(:word, id: "514b81cae14cfa78f335e250"),
                FactoryGirl.create(:word, id: "514b81cae14cfa7917e443f0"),
                FactoryGirl.create(:word, id: "514b81cae14cfa79182407a2"),
                FactoryGirl.create(:word, id: "514b81cae14cfa78f581c534")
            ]
        end
    end

end

私のディレクトリ内のどのファイルにもファクトリに関する言及がないことに注意してくださいconfig。そのため、ロードはgemによって自動的に行われます。Gemfile私の読み取りの関連部分:

# Stuff not to use in production
group :development, :test do
    # Command-line debugger for development
    gem "debugger"

    # for unit testing - replace fixtures
    gem "factory_girl_rails"
end

だから私は工場の女の子を開発環境から連れ出すことができました。しかし、ファクトリが使用される前にこれらのレコードが作成されているという事実は、ファクトリの記述が間違っていることを示していると思います。しかし、ファクトリが正しく記述されていると言われれば、そのまま実行します。

4

4 に答える 4

1

factory girl を開発環境から移動するだけです。

私は同じ問題を抱えていたので、ちょうどやった

group :test do
  gem 'faker'
  gem 'factory_girl_rails'
end

そして、魅力のように機能します。

私は開発中にこれらの宝石をまったく使用していないので、テストでそれらを定義するのは正しいです。

于 2016-07-26T00:23:12.350 に答える
0

工場またはモデルごとに、異なるファイルを配置する必要があります

spec/factories/word_factory.rb
spec/factories/board_factory.rb

したがって、各ファクトリの内容は、次のようになります。

FactoryGirl.define do
  factory :board do
    word
    special_id
  end
end

models/board_spec.rb などのテスト フォルダーにある場合

オブジェクトを作成できます

let(:word) { FactoryGirl.create(:word)
let(:board) { FactoryGirl.create(:board, word: word) }

これがあなたが必要としているものかどうか確信が持てません。間違っていたら訂正してください

于 2013-04-21T01:32:38.913 に答える
0

Railsの起動時ではなく、ファクトリが呼び出されたときに作成される単語が必要であると仮定すると、単語の配列をブロック内に配置する必要があります。

trait :has_words do
        words do [
            FactoryGirl.create(:word, id: "514b81cae14cfa78f335e250"),
            FactoryGirl.create(:word, id: "514b81cae14cfa7917e443f0"),
            FactoryGirl.create(:word, id: "514b81cae14cfa79182407a2"),
            FactoryGirl.create(:word, id: "514b81cae14cfa78f581c534")
            ]
        end 
    end
于 2013-08-08T22:45:51.920 に答える