SlideShare a Scribd company logo
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

More Related Content

What's hot

情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
Narichika Kajihara
 
明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ
明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ
明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ
taro fumizono
 
GitHub入門 手順編
GitHub入門 手順編GitHub入門 手順編
GitHub入門 手順編hideaki honda
 
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだらもしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
Tomoki Ando
 
心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話
Yusuke Hisatsu
 
ユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさ
Yoshiki Hayama
 
アジャイル開発とメトリクス
アジャイル開発とメトリクスアジャイル開発とメトリクス
アジャイル開発とメトリクス
Rakuten Group, Inc.
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
 
機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作
機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作
機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作
Futa HIRAKOBA
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
Tetsutaro Watanabe
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
Takeshi Arai
 
Tableauのつまづきポイント
TableauのつまづきポイントTableauのつまづきポイント
Tableauのつまづきポイント
Shinji Tamura
 
PayPayでのk8s活用事例
PayPayでのk8s活用事例PayPayでのk8s活用事例
PayPayでのk8s活用事例
PayPay Corporation
 
はじめてのアジャイル
はじめてのアジャイルはじめてのアジャイル
はじめてのアジャイル
Yoshihito Kuranuki
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
 
NuxtでAPIサーバー立ててみた
NuxtでAPIサーバー立ててみたNuxtでAPIサーバー立ててみた
NuxtでAPIサーバー立ててみた
ssuserbf0fbd
 
SQL Server のインデックス設計
SQL Server のインデックス設計SQL Server のインデックス設計
SQL Server のインデックス設計
Koji Yamada
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
Masahiro Tomita
 

What's hot (20)

情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
 
明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ
明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ
明日使える!デザイン思考×システム思考が身につく「 70デザイン項目」まとめ
 
GitHub入門 手順編
GitHub入門 手順編GitHub入門 手順編
GitHub入門 手順編
 
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだらもしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
 
心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話
 
ユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさ
 
アジャイル開発とメトリクス
アジャイル開発とメトリクスアジャイル開発とメトリクス
アジャイル開発とメトリクス
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作
機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作
機械学習を用いた仕様書からのテストケース自動生成ツールSpec2Testの試作
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
 
Tableauのつまづきポイント
TableauのつまづきポイントTableauのつまづきポイント
Tableauのつまづきポイント
 
PayPayでのk8s活用事例
PayPayでのk8s活用事例PayPayでのk8s活用事例
PayPayでのk8s活用事例
 
はじめてのアジャイル
はじめてのアジャイルはじめてのアジャイル
はじめてのアジャイル
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
NuxtでAPIサーバー立ててみた
NuxtでAPIサーバー立ててみたNuxtでAPIサーバー立ててみた
NuxtでAPIサーバー立ててみた
 
SQL Server のインデックス設計
SQL Server のインデックス設計SQL Server のインデックス設計
SQL Server のインデックス設計
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 

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

Ruby StyleStatsの紹介
Ruby StyleStatsの紹介Ruby StyleStatsの紹介
Ruby StyleStatsの紹介
Toshihiro Gotou
 
ENGINEER WORK!!
ENGINEER WORK!!ENGINEER WORK!!
ENGINEER WORK!!
sinsoku listy
 
ぼくのかんがえたさいきょうの 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_jror
Yoshiharu Hashimoto
 
Agile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjukuAgile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjuku
TomomiK
 
WACATE2018Summer BPP yoshitake
WACATE2018Summer BPP yoshitakeWACATE2018Summer BPP yoshitake
WACATE2018Summer BPP yoshitake
Nobuhiro 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
 
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷wpscala
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Hitoshi Asai
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp
Masahiro 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 Day2
tatsuo sakurai
 

Similar to 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年度社内向け年次活動報告-
 
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
 
技術系同人誌を書こう #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
 

Recently uploaded

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
BitVisor Summit 10「3. Thin Hypervisor on AArch64」
BitVisor Summit 10「3. Thin Hypervisor on AArch64」BitVisor Summit 10「3. Thin Hypervisor on AArch64」
BitVisor Summit 10「3. Thin Hypervisor on AArch64」
BitVisor
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 

Recently uploaded (7)

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
BitVisor Summit 10「3. Thin Hypervisor on AArch64」
BitVisor Summit 10「3. Thin Hypervisor on AArch64」BitVisor Summit 10「3. Thin Hypervisor on AArch64」
BitVisor Summit 10「3. Thin Hypervisor on AArch64」
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 

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