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