ぼくらのかんがえたさいきょうのfactory_bot
by
takakuda
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ZEALS Co.,Ltd ぼくらのかんがえたさいきょうの factory_bot RSpec テクノロジー開発部 takakuda
Slide 2
Slide 2 text
前職:雛人形売り - Ruby - Rails ZEALS Rails Engineer takakuda :takakuda : @kutaike1504
Slide 3
Slide 3 text
fanpの紹介
Slide 4
Slide 4 text
factory_bot
Slide 5
Slide 5 text
ZEALSのfactory_botの歴史
Slide 6
Slide 6 text
今日話すこと - default時代 - 一発作成時代 - 今
Slide 7
Slide 7 text
default時代 普通にfactory_botを使っていた after(:create)などはほとんどない traitが少しあるくらい
Slide 8
Slide 8 text
letがめちゃくちゃ多くなる - databaseが結構正規化されている - テスト対象のデータを作成するのが大変 - 可読性が低く、無理やりテストを通すようになる (それって本当にテストなの?状態)
Slide 9
Slide 9 text
無理やりデータを揃える
Slide 10
Slide 10 text
letが8個くらいつながってしまうと どんなテストデータが作成されているのかを 把握することが困難 テストデータの帳尻合わせるためにbeforeでupdateを 行う
Slide 11
Slide 11 text
テストカバレッジ98%(…すごい) …のにバグが発生し続ける -> テストで作成されるデータが間違ってるんじゃない? -> まちがったデータで作成されたテストをひたすら通し ていた
Slide 12
Slide 12 text
一発作成時代 - let書きまくり時代からの解放 - association, after(:create), traitsをフル活用 - 正しいテストデータを作成できるようにする - メンバーのRSpecを書く効率を上げたかった
Slide 13
Slide 13 text
factory_botでむすこを作 成すると、一番上のじい ちゃんまで作成されるよう に変更
Slide 14
Slide 14 text
良かった点 - letの数が確実に減った(可読性 ↑) - before内でupdateを使うことがなくなる - テストデータが齟齬ることがなくなる
Slide 15
Slide 15 text
実際にconsoleで見せます!
Slide 16
Slide 16 text
悪かった点 - かなり工数かかる(1ヶ月 factory_botリファクタ) - メンテ、共有のコスト - 全部作成してしまうのでテストに関係のないデータま でも作成してしまう - 全部作成する必要があるのか?問題
Slide 17
Slide 17 text
全部作らなければいけない理由 認証
Slide 18
Slide 18 text
今
Slide 19
Slide 19 text
認証を回避
Slide 20
Slide 20 text
テストのためにソースコードに変更を加えるようなことは しないほうが良い
Slide 21
Slide 21 text
認証部分をstubしちゃう
Slide 22
Slide 22 text
factory_botで全部作る必要 がなくなる
Slide 23
Slide 23 text
shared_context テストにおける条件を共有する
Slide 24
Slide 24 text
- やりすぎfactory_botをやめる - 認証部分はstub - 複雑なテスト前提条件shared_context
Slide 25
Slide 25 text
DRYに書きすぎて読みづらく ならないように バランスを考えて読みやすさ を重視する
Slide 26
Slide 26 text
まとめ
Slide 27
Slide 27 text
これからも改善続けます…! factory_botのベスト・プラクティ ス的なの持ってる方は是非教え てください!
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
Thank you!!