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

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

takakuda
June 26, 2019
2.3k

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

takakuda

June 26, 2019
Tweet

Transcript

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

    View full-size slide

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

    View full-size slide

  3. fanpの紹介

    View full-size slide

  4. ZEALSのfactory_botの歴史

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 一発作成時代
    - let書きまくり時代からの解放
    - association, after(:create), traitsをフル活用
    - 正しいテストデータを作成できるようにする
    - メンバーのRSpecを書く効率を上げたかった

    View full-size slide

  12. factory_botでむすこを作
    成すると、一番上のじい
    ちゃんまで作成されるよう
    に変更

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. 全部作らなければいけない理由
    認証

    View full-size slide

  17. 認証を回避

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide