SlideShare a Scribd company logo
1 of 65
Fabrication!
研究社 新英和中辞典 fabrication 音節 fab ・ ri ・ ca ・ tion   発音記号 / f`æbrɪkéɪʃən / 【名詞】 1 【不可算名詞】  製作 ;  作り 上げ , でっちあげ ;  偽造 . 2 【可算名詞】  作り ごと,うそ .
機械工学英和和英辞典 [fuel] fabrication 成型加工
Fabrication is a simple, powerful object generation library. Fabrication はシンプルで強力な、 オブジェクト生成ライブラリです。 公式サイト( http://fabricationgem.org/ )より
オブジェクト生成? ↓ これ MyObject.new MyObject.create
それだけ? 何が嬉しいの?
例: もしもこんな クラスが あったら……
class Book validates :title,  presence: true validates :author, presence: true validates :price, presence: true validates :stock, presence: true end 本
4つの必須属性
テスト: タイトルが空なら invalid になること
book = Book.new(title: '',   author: 'foo',   publisher: 'bar',   price: 100) book.should be_invalid 書いてみる
book = Book.new(title: '',  # <  空です   author: 'foo',   # < foo です   publisher: 'bar', # < bar です   price: 100) # < 100 です book.should be_invalid # <  それは不正です コードから伝わる情報
book = Book.new(title: '',  # <  お前らうるさい   author: 'foo',   # <  えー   publisher: 'bar', # <  えー   price: 100) # <  えー book.should be_invalid # <  それは不正です ノイズ。
Fabrication!
まず準備として
Fabricator(:book) do title 'MyTitle' author 'MyAuthor' publisher 'MyPublisher' price 1 end
無難なデフォルト値を 定義しておく
book = Fabricate.build(:book, title: '') book.should be_invalid 書いてみるⅡ
book = Fabricate.build(:book, title: '') # <  タイトルが空です book.should be_invalid  # <  それは不正です author < …… publisher < …… price < …… コードから伝わる情報Ⅱ
明確
Fabrication!
http://fabricationgem.org/
現在こいつらをサポート : ,[object Object]
ActiveRecord objects
Mongoid Documents
Sequel Models
Installation -  インストール  -
gem install fabrication
Gemfile: #  基本的にテストで使うが、 #  rails console でも使えると便利 group :development, :test do gem 'fabrication' end > bundle install
Defining Fabricators - Fabricator の定義  -
あるクラスに どういうデフォルト値を 与えるか?
例えばこんなクラス # name と job を持つ Person クラス Person.new( name: 'Taro', job: 'Programmer')
# spec/fabricators/person_fabricator.rb Fabricator(:person) do name 'Taro' job 'Programmer' end :personというFabricatorの定義
実際に生成する
3種類の生成メソッド # new して save (create) したものを返す Fabricate (:person) # new だけして save せずに返す Fabricate. build (:person) #  属性の Hash を返す Fabricate. attributes_for (:person)
person = Fabricate(:person, name: &quot;Hanako&quot; ) person.name # => “Hanako” person.job # => “Programmer” 属性の値を明示する
# ( 引数の Hash の方が優先 ) Fabricate(:person,  :name => &quot;Ichiro&quot;)  do job &quot;Baseballer&quot; end ブロックも渡せる
基本的な使い方 以上。
もっと詳しく Fabricator 定義
# spec/fabricators/person_fabricator.rb Fabricator(:person) do name 'Taro' job 'Programmer' end 再掲
Fabricator(:person) do #  テストデータ生成ライブラリを使う name  { Faker::Name.name } #  ランダムな値を使う job  { %w( Singer Desinger Manager).sample } end ブロックも使える
Fabricator(:person) do name {  %w(alice bob carol).sample  } #  名前からメールアドレスを決める email { |person| &quot;#{ person.name }@example.com&quot; } end 属性は上から順に決まっていく
#  呼ぶごとに 0 から増えてい く Fabricate. sequence #  シーケンスに名前をつけて区別する Fabricate.sequence( :name ) # 0 じゃなく 99 から始める Fabricate.sequence(:number,  99 ) #  ブロックも渡せる Fabricate.sequence(:name)  { |i| &quot;Name #{i}&quot; } Sequence
Fabricator(:person) do ssn {  sequence(:ssn, 111111111)  } email { sequence(:email) { |i| &quot;user#{i}@example.com&quot; } } end ユニーク制約にはSequence
class Person belongs_to :vehicle   #  乗り物 validates :vehicle_id,  presence: true   # … は必須 end # Vehicle は↓これでいいとして、 class Vehicle validates :name, presence: true end Fabricator(:vehicle) do name 'name1' end 例:Personは必ずVehicleを持つ
#  こう書けるが、 Fabricator(:person) do vehicle { Fabricate( :vehicle ) } end #  これでも同じ意味になる Fabricator(:person) do vehicle end ただ属性名だけを書く
例:属性名とモデル名が違う場合 class Person belongs_to  :ride, class_name: 'Vehicle' validates :vehicle_id, presence: true end # person.vehicle  ではなく person.ride  #  で Vehicle オブジェクトにアクセス
:fabricatorオプションを渡す #  こう書けるが Fabricator(:person) do ride { Fabricate( :vehicle ) } end #  これでも同じ意味になる Fabricator(:person) do ride( fabricator: :vehicle ) end
継承 Fabricator(:person) do name  'name1' age 20 end # :person をベースに :child を定義する Fabricator(:child,  from: :person ) do age 10 end child = Fabricate(:child) child.name  # => 'name1' child.age  # => 10
対コンストラクタ # x と y が無いと new できない class Location def initialize(x, y) @x, @y = x, y end end Fabricator(:location) do on_init  {  init_with (30.284167, -81.396111) } end
Callback Fabricator(:person) do # Fabricate.build 後に geolocate! する after_build  { |person| place.geolocate! } # Fabricate(:person) 後に Restaurant を作る after_create  { |person| Fabricate(:restaurant, place: person.place) } end
Configuration -  設定  -
ここに Fabricator 定義を置けば 勝手に読まれる spec/fabricators/**/*fabricator.rb test/fabricators/**/*fabricator.rb
Fabrication.configure do |config| # fabricator 定義の置き場所 fabricator_dir = &quot;data/fabricators&quot; #  複数ある場合は配列でもよし # fabricator_dir = [&quot;data/fabricators&quot;, # &quot;spec/fabricators&quot;] end
Fabrication!
使用上の注意 (リアル話)
Fabricator(:item) do seller( fabricator: :shop ) main_category( fabricator: :category ) sub_categories( fabricator: :category,  count: 3 ) users( fabricator: :user, count: 3 ) etc... etc... end 連鎖
テスト時間 30 分 ->  2 時間
[object Object],[object Object],[object Object]
これをプロジェクト初期に明示、周知
根本的に、 テストの速度は大事 。 教訓
ちなみに、こうして解決しました Fabricator(:item) do main_category do Category.first ||  Fabricate(:category) end end by @kengos
describe User do it 'full_name は苗字+名前になる ' do user = Fabricate(:user) user.full_name.should ==  'Yamada Taro' end end テストの可読性
[object Object]
テスト対象の値は明示する。 it 'full_name は苗字+名前になる ' do user = Fabricate(:user, first_name: 'Taro', last_name: 'Yamada' ) user.full_name.should ==  'Yamada Taro' end

More Related Content

Viewers also liked

Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
Sea Mountain
 
浜松Rails3道場 其の四 View編
浜松Rails3道場 其の四 View編浜松Rails3道場 其の四 View編
浜松Rails3道場 其の四 View編
Masakuni Kato
 
QC Field Engineer 2016
QC Field Engineer 2016QC Field Engineer 2016
QC Field Engineer 2016
Michael Nugent
 

Viewers also liked (20)

Fabrication and Quality Control of structural steel
Fabrication and Quality Control of structural steelFabrication and Quality Control of structural steel
Fabrication and Quality Control of structural steel
 
Presentation on steel, fabrication & erection Munger Ganga Bridge
Presentation on steel, fabrication & erection  Munger Ganga BridgePresentation on steel, fabrication & erection  Munger Ganga Bridge
Presentation on steel, fabrication & erection Munger Ganga Bridge
 
Erection of steel Structure
Erection of steel StructureErection of steel Structure
Erection of steel Structure
 
Shop fabrication of structural steel
Shop fabrication of structural steelShop fabrication of structural steel
Shop fabrication of structural steel
 
Metal Fabrication Shops General Presentation (Andew Cutz, Cih)
Metal Fabrication Shops   General Presentation (Andew Cutz, Cih)Metal Fabrication Shops   General Presentation (Andew Cutz, Cih)
Metal Fabrication Shops General Presentation (Andew Cutz, Cih)
 
Structural Steel Welding Inspection
Structural Steel Welding InspectionStructural Steel Welding Inspection
Structural Steel Welding Inspection
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
 
Start developing Facebook apps in 13 steps
Start developing Facebook apps in 13 stepsStart developing Facebook apps in 13 steps
Start developing Facebook apps in 13 steps
 
浜松Rails3道場 其の四 View編
浜松Rails3道場 其の四 View編浜松Rails3道場 其の四 View編
浜松Rails3道場 其の四 View編
 
FactoryGirl入門
FactoryGirl入門FactoryGirl入門
FactoryGirl入門
 
Galvanized Steel Manufacturing
Galvanized Steel Manufacturing Galvanized Steel Manufacturing
Galvanized Steel Manufacturing
 
Maker Night Fabbing Intro
Maker Night Fabbing IntroMaker Night Fabbing Intro
Maker Night Fabbing Intro
 
Interaction design AIGA & AIA 20/20
Interaction design AIGA & AIA 20/20Interaction design AIGA & AIA 20/20
Interaction design AIGA & AIA 20/20
 
Final Presentation
Final PresentationFinal Presentation
Final Presentation
 
QC Field Engineer 2016
QC Field Engineer 2016QC Field Engineer 2016
QC Field Engineer 2016
 
Single Belt Oven Conveyor Alignment
Single Belt Oven Conveyor AlignmentSingle Belt Oven Conveyor Alignment
Single Belt Oven Conveyor Alignment
 
Steel building-erection-manual
Steel building-erection-manualSteel building-erection-manual
Steel building-erection-manual
 
Multi-material 3D Printing
Multi-material 3D PrintingMulti-material 3D Printing
Multi-material 3D Printing
 
Fabrication process flow
Fabrication process flowFabrication process flow
Fabrication process flow
 
Engineering drawing
Engineering drawingEngineering drawing
Engineering drawing
 

Similar to Fabrication

Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
VOYAGE GROUP
 

Similar to Fabrication (20)

Haikara
HaikaraHaikara
Haikara
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
 
オンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用についてオンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用について
 
Stroustrup10章雑感
Stroustrup10章雑感Stroustrup10章雑感
Stroustrup10章雑感
 
わかるコードを書くために For writing clean code
わかるコードを書くために For writing clean codeわかるコードを書くために For writing clean code
わかるコードを書くために For writing clean code
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
1.29.user,user,user
1.29.user,user,user1.29.user,user,user
1.29.user,user,user
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Simo Tutrial
Simo TutrialSimo Tutrial
Simo Tutrial
 
Simo Tutrial
Simo TutrialSimo Tutrial
Simo Tutrial
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
 

Recently uploaded

Recently uploaded (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Fabrication

Editor's Notes

  1. “Fabrication”の意味は?-&gt;
  2. ネガティブな言葉ばっかり…
  3. これだ! 原料を型に流しこんで同じ物をたくさん作る!
  4. 公式サイトの説明文です。
  5. 例を挙げてみます
  6. 本。 注目すべきは… -&gt;
  7. presence。無いとダメ。空白許されない。 つまり、4つ値を設定しないと保存できない。
  8. こういうテストを書きたい。 書いてみましょう -&gt;
  9. こうまぁこう書くかなー titleはだけカラにして、 他はテキトーな値を入れて。
  10. コードから伝わる情報を そのまま読み取ってみると、こうなる。
  11. 余計な情報が多くて邪魔。 関心があるのはtitleだけなのに。 書くのも面倒。 ”テキトーな値”を考えるのも面倒。 そこで -&gt;
  12. Fabricationですよ
  13. Fabricationを使うとどうなるか?説明します。 まず準備が要ります。
  14. こんなコードを書いておきます。 bookのFabricator。
  15. MyTitle, MyAuthor。 テキトーだけどvalidationには引っかからない。 そんな値を予め用意しておく。
  16. Fabricatorを利用してbookを生成する。
  17. authorやらpublisherやらは出しゃばってこない。 titleだけについて書かれている。
  18. これが Fabrication 。 OK ? -&gt;
  19. 公式サイトの記述を追いながら、 その機能を説明していきます。
  20. Plain old Ruby objectsというのはつまり、 普通に定義した クラス 。 Fabricatorから使われることとか想定していないし、 フレームワークのクラスから派生したりしてない。 他3つはORマッパー。 ActiveRecordはRailsの。 自分はActiveRecordを生成するのにしか 使ったことがないので、 基本それを想定して説明していく。
  21. まずはインストール方法。
  22. コマンドラインからこう打ち込む
  23. railsなら、Gemfileにこう書く。 そしてbundle installとコマンドラインから打つ。 基本的にテストで使うものだが、 開発中にちょっとrails console立ち上げて 生成してみて動きを見る、みたいなことも よくやりたくなるので、 それができるように:developmentにも 入れておくと便利。推奨。 次に -&gt;
  24. これはつまり、デフォルト値の宣言。
  25. 名前と職業を持つPersonクラス。 こういうクラスがあるとすると… -&gt;
  26. :personというFabricatorをこうやって定義する。 これをspec/fabricators/person_fabricator.rbという ファイルに書いておく。 これで準備が整った。 そして -&gt;
  27. 3種類の生成の仕方がある。 1.オブジェクトを作ってDBに保存した上で返す。 2.DBには保存しない。   あえてvalidationに引っかかる奴を作るとか。   保存しないなら当然高速でもある。 3.Hashで。   これは元々のクラスのnewとかに渡せる。 与える引数の形式は、3つ全部同じ。 それをこれから説明します。 -&gt;
  28. 明示的にnameにHanakoを指定した。 nameは指定したHanako、 指定されてないjobは Fabricatorで指定されたデフォルトが使われる
  29. 先のFabricator定義と同じような書式での書き方。 使ったことはない。 同じ値を引数とブロック両方で指定すると、 引数のほうが使われる。
  30. 以上。 これでデフォルトを定義しといて、 必要な部分だけを明示して生成するという、 基本の使い方はわかったと思う。
  31. あとはFabricatorの定義に 色々な機能が使えることを説明したい。
  32. ここでさっき定義した Fabricator をおさらい。
  33. デフォルトが固定値では困る場合、 ブロックを使う。 ブロックはオブジェクト生成のたびに実行され、 その戻り値が値になる。 Fakerはデータ生成のためのデータ集みたいなもの。 BillとかSteveとかそれっぽい名前を ランダムに返してくれる。 %wは文字列配列のためのRubyのリテラル記法。 sampleは配列のどれか1つを ランダムに返すメソッド。
  34. ブロックには生成途中のオブジェクトが渡される。 ので、メールアドレスに名前を含めたりできる。 まず名前がランダムに決まり、 次にその名前を使ってアドレスを決めている。 では次の機能 -&gt;
  35. sequenceという機能がある。 DBのシーケンスと同じ、1ずつ増える数値機能。 プロセスが終了するまでリセットされない。
  36. ユニーク制約。 同じ値を持つオブジェクトが 複数あってはいけない場合。 sequence が使える。 これは公式サイトの例だが、 ssn 、社会保障番号という国民背番号を生成する。 Fabricator の中でも外でも sequence は呼び出せる。 これは中なので直接呼び出している。 外からは先程のように、 Fabricate.sequence とする。
  37. ヴィークル。 乗り物オブジェクトはとりあえずこのように Fabricatorも定義しておくとして、 :personの定義。 -&gt;
  38. 今見てきた知識だと上のように書くことになる。 下のようにも書ける。
  39. ヴぃーくる。 PersonはVehicleに、ride、乗っている。 という定義。
  40. まぁ上のように書けるが、 下のようにも書ける。
  41. 継承という機能。 すでにある:personというFabricatorを 一部上書きする形で、 :childという新しいFabricator定義を作る。 :childもまたPersonクラスだが、 age、年齢のデフォルトが 20から10に変更されている。 nameは引き続き&apos;name1&apos;。
  42. x, y座標を要求するLocationオブジェクト。 これに対するFabricatorもちゃんと定義できる。 on_initはnewの直前に呼ばれるコールバック。 ここでinit_withすると、newへの引数が渡せる。 このあと各属性に対してname=という プロパティ代入、setterの呼び出しが続く。
  43. 先ほどのon_initもそうだが、 他に2つのcallbackがある。 after_buildはnewの直後、saveされるされないに 関わらず呼び出される処理を宣言できる。 after_createはFabricateでDBに保存されたあとで 呼び出される。buildでは呼ばれない。 先ほどのon_initとafter_buildを組み合わせれば、 Plain old Ruby objectもある程度生成できる。 自分ですでに書いてあるclassでも。 それとafter_createのポイントの1つは、 ここならidが取得できること。 ただしbuild-&gt;saveでは呼ばれない。
  44. 以上で Fabricator の定義の説明は打ち切り。 残った Configuration の説明。
  45. デフォルトではここにfabricatorを置く。
  46. そこじゃ困るって場合は、 こうして変更できるようになってる。 まぁそれだけ。
  47. 以上が公式サイトの説明。 これが Fabrication です。 あとはせっかくなので、 私見とかおせっかいとか。 もーちょっと。
  48. 実際に遭遇したトラブルから1点と、 自分の私見やおせっかいなどが少し続きます。
  49. こんなコードが書かれたことがあった。 1個の商品を生成すると、 それに関連するいろんなオブジェクトが 連鎖的に作られる。 履歴から読んでみたらなんと40個。 商品を生成してるテストはそりゃあ沢山あった。 その結果どうなったか -&gt;
  50. ……
  51. 私学びました。 rspecが「最も遅いテスト・ワースト10」を 表示できることも知りました。 方法は調べて。
  52. 他人のhackを勝手に自分のプレゼンに流用! ズルイ! 一見コワイ! しかし、実際デフォルト値に過ぎないので アクセスされないのが前提! なので上手くいく! ワザマエ!
  53. さらっと。 こう書いてしまうかもしれない。 Yamada Taroという値になる理由は? Fabricatorにこれがデフォルトとして 書かれているからなんですが。
  54. テストでデフォルト値を繰り返す価値はある。 これは重複ではない。
  55. おせっかい。 これで最後だから、もーちょっとだけ。
  56. RubyKaigi2011におけるmoroさんの発表。 slideshareに上がってる。 テストsetupの整頓方法とでも言うべきか。 個人研究、議論の叩き台だという断りはあり。
  57. どういう発表かというと、 データって3種類に分類できね? データ生成方法も3種類あるじゃん? (そのうち1つがFabricationのような  fixture replacement) どれを使うべきか? と、更にrspecの機能も活用することで、 よりテストを読みやすく、書きやすく。 Fabricatorをより適切に使いこなすために 役に立つかもしれない。
  58. 最後。
  59. そもそもテスト書いたことないよ! Fabrication以前にテスト自体チンプンカンプンさ! という人に、rspec入門記事として。 そうでない人でも、 テストフレームワークの機能を詳しく知ることで、 重複を省いたよりよいテストが書けるはず。 入門からさらに一歩、二歩、踏み込む記事として。 これを紹介して、ようやくこの発表はお終いです。
  60. 何か質問があればどうぞ。