Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ぼくらのかんがえたさいきょうのfactory_bot

81fe622dd65db0bd338dfccecdbf49f3?s=47 takakuda
June 26, 2019
1.7k

 ぼくらのかんがえたさいきょうのfactory_bot

81fe622dd65db0bd338dfccecdbf49f3?s=128

takakuda

June 26, 2019
Tweet

Transcript

  1. ZEALS Co.,Ltd ぼくらのかんがえたさいきょうの factory_bot RSpec テクノロジー開発部 takakuda

  2. 前職:雛人形売り - Ruby - Rails ZEALS Rails Engineer takakuda :takakuda

    : @kutaike1504
  3. fanpの紹介

  4. factory_bot

  5. ZEALSのfactory_botの歴史

  6. 今日話すこと - default時代 - 一発作成時代 - 今

  7. default時代 普通にfactory_botを使っていた after(:create)などはほとんどない traitが少しあるくらい

  8. letがめちゃくちゃ多くなる - databaseが結構正規化されている - テスト対象のデータを作成するのが大変 - 可読性が低く、無理やりテストを通すようになる (それって本当にテストなの?状態)

  9. 無理やりデータを揃える

  10. letが8個くらいつながってしまうと どんなテストデータが作成されているのかを 把握することが困難 テストデータの帳尻合わせるためにbeforeでupdateを 行う

  11. テストカバレッジ98%(…すごい) …のにバグが発生し続ける -> テストで作成されるデータが間違ってるんじゃない? -> まちがったデータで作成されたテストをひたすら通し ていた

  12. 一発作成時代 - let書きまくり時代からの解放 - association, after(:create), traitsをフル活用 - 正しいテストデータを作成できるようにする -

    メンバーのRSpecを書く効率を上げたかった
  13. factory_botでむすこを作 成すると、一番上のじい ちゃんまで作成されるよう に変更

  14. 良かった点 - letの数が確実に減った(可読性 ↑) - before内でupdateを使うことがなくなる - テストデータが齟齬ることがなくなる

  15. 実際にconsoleで見せます!

  16. 悪かった点 - かなり工数かかる(1ヶ月 factory_botリファクタ) - メンテ、共有のコスト - 全部作成してしまうのでテストに関係のないデータま でも作成してしまう -

    全部作成する必要があるのか?問題
  17. 全部作らなければいけない理由 認証

  18. 認証を回避

  19. テストのためにソースコードに変更を加えるようなことは しないほうが良い

  20. 認証部分をstubしちゃう

  21. factory_botで全部作る必要 がなくなる

  22. shared_context テストにおける条件を共有する

  23. - やりすぎfactory_botをやめる - 認証部分はstub - 複雑なテスト前提条件shared_context

  24. DRYに書きすぎて読みづらく ならないように バランスを考えて読みやすさ を重視する

  25. まとめ

  26. これからも改善続けます…! factory_botのベスト・プラクティ ス的なの持ってる方は是非教え てください!

  27. None
  28. Thank you!!