SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
RSpec
あなたならどう書く?
20190626 gotanda.rb #37
お前誰よ?
自己紹介
•菅野 幸助
• バックエンドエンジニア

(Rails歴3年くらい)
• Linc wellという医療スタートアップで
Rails触ってます。
• 個人では最近Apollo + Typescriptなど
• Twitter: @saiid_kk
• Github: saiidalhalawi
• note: https://note.mu/saiid114
お仕事
https://jp.techcrunch.com/2019/05/27/linc-well-fundraising/
ここから本題
• Rspecでテストを書いていて「動くけど、本当にこれでい
いんだろうか・・・」と、思うことありませんか?
• レビューもCIもパスするし、問題がある訳ではないけ
ど・・・
• どうにもしっくりこない時がけっこうある 

-> 他の人がどう書いてるのか気になる
• 色々な流儀や考え方を知りたい
テストのモヤモヤ
そこで、アンケートを
とりたいと思います
•「いつもこう書いてる」
•「規模やチームによる」
•「こっちの方が好き」
•「これ以外ありえない!」
•・・・etc
色々あると思いますが、

思い思いの判断基準でご回答ください。
題して
RSpec、あなたならどう書く?
第1問
Request Spec は . . .
1. Actionごとに分ける 2. Controllerごとに分ける
第2問
System Spec は . . .
1. 重いので大事なとこだけ 2. なるべく多くのケース書きたい
第3問
SharedExamples は . . .
1. やり過ぎると逆に読みにくいので

あまり使わない
2. DRY!DRY! 積極的に使う
第4問
before/after(:all) は . . .
1. 便利だから使う時もある 2. Rubocopで禁止
https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/BeforeAfterAll
第5問
RSpec/NestedGroupsは . . .
1. 構造化させたいので許可 2. Rubocopで禁止
第6問
テストデータの定義は . . .
1. 呼び出し元でつくる 2. 呼び出し先でつくっておく
第7問
時間は . . .
1. 止める 2. つくる
第8問
テストの説明は . . .
1. 日本語 2. 英語
第9問
複雑な事前データは . . .
1. beforeでまとめて派 2. letで組み上げる派
第10問
it スコープ内は . . .
1. 絶対に汚したくない! 2. ある程度柔軟に
以上で終わりです
• Request Specは ・・・ Actionごと
• System Specは・・・大事なとこだけ
• SharedExamplesは・・・あまり使わない
• before/after(:all)は・・・禁止
• NestedGroups・・・使う
• テストデータの定義は・・・呼び出し元でつくる
• 時間は・・・つくる
• テストの説明は・・・英語 (背伸び)
• 複雑な事前データは・・・letで組み上げる
• itスコープ内は・・・絶対汚したくない!
私の場合
回答を見ていると

なんとなく人となりが
見えてきますね(!?)
‘’ Tell me how you write RSpec tests,
I'll tell you who you are. ’’
皆さんは

どうだったでしょうか?
• Request Specは ・・・ Controllerごと
• System Specは・・・大事なとこだけ
• SharedExamplesは・・・積極的に使う
• before/after(:all)は・・・
• NestedGroups・・・使う
• テストデータの定義は・・・呼び出し先(Factory)でつく
る
• 時間は・・・つくる
• テストの説明は・・・日本語
• 複雑な事前データは・・・letで組み上げる
• itスコープ内は・・・ある程度柔軟に
当日のアジャイル集計結果(目視)
やや優勢
やや優勢
ややこっち
優勢
やや優勢
優勢
やや優勢
圧倒的優勢
やや優勢
勝敗つかず(ケースによる)
他にも「この2択は?」
というものがあれば

是非知りたいです
WE ARE HIRING !! 的な
https://www.wantedly.com/projects/324351
ありがとうございました
m(_ _)m

Contenu connexe

Tendances

それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
ドメインモデルの育て方
ドメインモデルの育て方ドメインモデルの育て方
ドメインモデルの育て方増田 亨
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
どこに何を書くのか?
どこに何を書くのか?どこに何を書くのか?
どこに何を書くのか?pospome
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてTomoya Kawanishi
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!デベロッパーネットワーク
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
リーン開発の本質 公開用
リーン開発の本質 公開用リーン開発の本質 公開用
リーン開発の本質 公開用ESM SEC
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 

Tendances (20)

それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
ドメインモデルの育て方
ドメインモデルの育て方ドメインモデルの育て方
ドメインモデルの育て方
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
どこに何を書くのか?
どこに何を書くのか?どこに何を書くのか?
どこに何を書くのか?
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
リーン開発の本質 公開用
リーン開発の本質 公開用リーン開発の本質 公開用
リーン開発の本質 公開用
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 

Similaire à Rspec、あなたならどう書く? 20190626

Ruby StyleStatsの紹介
Ruby StyleStatsの紹介Ruby StyleStatsの紹介
Ruby StyleStatsの紹介Toshihiro Gotou
 
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュKenji Mori
 
20100619 wakhok important_of_io_with_jror
20100619 wakhok important_of_io_with_jror20100619 wakhok important_of_io_with_jror
20100619 wakhok important_of_io_with_jrorYoshiharu Hashimoto
 
Agile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjukuAgile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjukuTomomiK
 
WACATE2018Summer BPP yoshitake
WACATE2018Summer BPP yoshitakeWACATE2018Summer BPP yoshitake
WACATE2018Summer BPP yoshitakeNobuhiro Yoshitake
 
プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話Cake YOSHIDA
 
LINEスタンプの作り方
LINEスタンプの作り方LINEスタンプの作り方
LINEスタンプの作り方Aoi Motomura
 
RubyとRのおいしい関係
RubyとRのおいしい関係RubyとRのおいしい関係
RubyとRのおいしい関係sady_nitro
 
Rでを作る
Rでを作るRでを作る
Rでを作るNagi Teramo
 
お前”だれ”やねん? -2012年度社内向け年次活動報告-
お前”だれ”やねん? -2012年度社内向け年次活動報告-お前”だれ”やねん? -2012年度社内向け年次活動報告-
お前”だれ”やねん? -2012年度社内向け年次活動報告-Kazuhito Miura
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Hitoshi Asai
 
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷wpscala
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjpMasahiro NAKAYAMA
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みSansan
 
MF GeeksNight pplogの話
MF GeeksNight pplogの話MF GeeksNight pplogの話
MF GeeksNight pplogの話Naoto Koshikawa
 
プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!YASUKAZU NAGATOMI
 
Rails5クイックスタート
Rails5クイックスタートRails5クイックスタート
Rails5クイックスタートHirata Tomoko
 
人気の勉強会を逃さないシステム
人気の勉強会を逃さないシステム人気の勉強会を逃さないシステム
人気の勉強会を逃さないシステムryonext Shimamoto
 
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2tatsuo sakurai
 

Similaire à Rspec、あなたならどう書く? 20190626 (20)

Ruby StyleStatsの紹介
Ruby StyleStatsの紹介Ruby StyleStatsの紹介
Ruby StyleStatsの紹介
 
ENGINEER WORK!!
ENGINEER WORK!!ENGINEER WORK!!
ENGINEER WORK!!
 
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
 
20100619 wakhok important_of_io_with_jror
20100619 wakhok important_of_io_with_jror20100619 wakhok important_of_io_with_jror
20100619 wakhok important_of_io_with_jror
 
Agile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjukuAgile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjuku
 
WACATE2018Summer BPP yoshitake
WACATE2018Summer BPP yoshitakeWACATE2018Summer BPP yoshitake
WACATE2018Summer BPP yoshitake
 
プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話
 
LINEスタンプの作り方
LINEスタンプの作り方LINEスタンプの作り方
LINEスタンプの作り方
 
RubyとRのおいしい関係
RubyとRのおいしい関係RubyとRのおいしい関係
RubyとRのおいしい関係
 
Rでを作る
Rでを作るRでを作る
Rでを作る
 
お前”だれ”やねん? -2012年度社内向け年次活動報告-
お前”だれ”やねん? -2012年度社内向け年次活動報告-お前”だれ”やねん? -2012年度社内向け年次活動報告-
お前”だれ”やねん? -2012年度社内向け年次活動報告-
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
 
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組み
 
MF GeeksNight pplogの話
MF GeeksNight pplogの話MF GeeksNight pplogの話
MF GeeksNight pplogの話
 
プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!
 
Rails5クイックスタート
Rails5クイックスタートRails5クイックスタート
Rails5クイックスタート
 
人気の勉強会を逃さないシステム
人気の勉強会を逃さないシステム人気の勉強会を逃さないシステム
人気の勉強会を逃さないシステム
 
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2
 

Rspec、あなたならどう書く? 20190626