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!!