15

テストでフィクスチャを置き換えることを目的とする Rails プラグインは多数あります。ここに私が考えることができるいくつかがあります:

  • 器具の交換
  • 工場の女の子
  • 工場と労働者
  • レールシナリオ
  • 備品シナリオ
  • オブジェクトパパ

おそらく他にもあります。これらのプラグインのうち、どのプラグインが好きですか? その理由は?

4

9 に答える 9

6

私は個人的にカスタム Factory クラスでFakerを使用しています。これにより、ファクトリを作成し、生成されたインスタンスに非静的データを入力できます。

# spec/factory.rb
module Factory
  def self.create_offer(options={})
    Offer.create({
      :code => Faker::Lorem.words(1),
      :expires_on => Time.now + (rand(30) + 1).day
    }.merge(options))
  end
end


# spec_helper.rb
require 'faker'
require 'spec/factory'


# In the specs
@offer = Factory.create_offer(:code => 'TESTING')
于 2008-10-17T10:23:44.587 に答える
4

Factory Girlにもプラスワンを与えることができます. 複数のファクトリ間で関連付けることができる方法は、ある程度通常のモデル セットがある場合に非常に役立ちます。たとえば、プロジェクトには 1 人のプロジェクト マネージャーがいます。

Factory.define :project_manager do |f|
  f.first_name "John"
  f.last_name  "Doe"
end

Factory.define :project do |f|
  f.name "Sample Project"
  f.association :project_manager
end

そうすれば、各テストで実際に関係を設定することについて心配する必要がなくなります。また、Factory.sequence を使用して工場でサンプル データを構築できる Faker のような作業も実行できます。Factory Girl に関するすべての情報については、http://dev.thoughtbot.com/factory_girl/ をご覧ください

于 2009-10-06T06:37:39.447 に答える
4

私はフィクスチャの交換を提唱します 2 . デフォルトの (気にしない) モデル属性はすべて 1 か所 (db/example_data.rb) に保存され、迅速に有効なオブジェクトを提供します。作成時に指定した属性は、デフォルトの属性をオーバーライドします。つまり、関心のあるデータtestあり、他には何もありません。

サンプル データは、遅延評価の proc によって表される他のデフォルト モデルを参照することもできるため、必要に応じて関連付けを簡単にオーバーライドできます。

new_*, create_*, and default_*バージョン 2 では、すべてのモデルに魔法のメソッドを提供しながら、よりクリーンな定義形式を提供します。

後で読むのが難しいテストデータをますます構築することを奨励するような「シナリオ」スキームは避けたいと思います。FR2 を使用して名前付き (カスタム) オブジェクトを作成できますが、その必要性を見つけたことはありません。

PSユニットテスト戦略も検討してください-フィクスチャとそのすべての類似物は、DBにヒットする実際のオブジェクトであり、機能テストまたは統合テストを行います。現在、RSpec のモッキングとstub_model()最新のunit_record gem を使用して、DB アクセスを禁止しています。

于 2008-10-18T00:05:28.530 に答える
3

1つまたは少数のオブジェクトのみが必要な場合、私はファクトリの大ファンです。自分で書くか、ThoughtbotのFactoryGirlを使用することができます

相互に関連するオブジェクトのキュレートされたセットが必要な状況では、フィクスチャはファクトリを打ち負かします。フィクスチャをかなり乾燥させて管理しやすくする優れたLiteフィクスチャを確認する必要があります。

于 2009-01-11T06:35:15.203 に答える
3

+1 ファクトリーガール

于 2008-10-17T13:10:50.507 に答える
3

プロジェクトで Factory Girl を使い始めたところです。そのやり方は、私たちの自家製ソリューションとそれほど変わらないので、うまく機能しています。

于 2008-10-17T17:27:09.473 に答える
3

Ryan Bates の Populator gem と一緒に Faker を使用しています。彼はhttp://railscasts.com/episodes/126-populating-a-databaseに素敵なスクリーンキャストさえ持っています。

于 2009-01-03T12:01:12.107 に答える
2

私は最近機械工と遊んでいて、それを掘っています。

于 2009-01-08T18:26:57.147 に答える
0

ファクトリーガールはいいぞ。作業負荷で使用します。

Factory.define :usa, :class => Team do |f|
  f.country_name 'USA'
  f.rank         15.6
end

Factory.define :player do |f|
  f.first_name 'Stevie'
  f.last_name  'Wonder'
  f.team       Factory.build(:usa)
end

次に、仕様で、Factory.build(:usa)またはを使用Factory.create(:usa)して、それぞれ USA チームを構築または作成できます。

于 2009-06-29T23:04:57.017 に答える