SlideShare a Scribd company logo
1 of 14
rspec-retry_ex の 紹介
ランダムにおちる
feature/system spec 対策
2019.02.20 Otemachi.rb #14
Yuya Taki
・新卒で某SIerに就職
・渋谷の企業にてRuby on Railsを学ぶ
・2016年10月にENECHANGEにjoin
・よちよち.kotlinを気まぐれに開催
Name : Yuya Taki
GitHub : yuyasat
Qiita : yuyasat
・gemのロゴを書いたり…
(commitはしていない)
・たまにQiitaの記事を書いたり…
・○よ○よ風ゲームをReact.jsで実装した
り
[2]
self.inspect
[1] https://github.com/muramurasan/okuribito
[2] http://poject.herokuapp.com/
[1]
CI(Continuous Integration)で落ちたり通ったり
しませんか?
落ちたり
通ったり
理由は・・・
良くわからない。
でも大抵落ちてるのは・・
あこーでぃおん
も一度回してみたら通る
RebuildしてOKだったらよしとしてもいいのではと
誰かが言っていた
そこで・・
RSpec::Retry
・scenario単位でリトライ
https://github.com/NoRedInk/rspec-
retry
scenario 'create user', retry: 3 do
visit root_path
expect(page).to have_content 'hoge'
fill_in 'user[email]', with: 'fuga@example.com'
fill_in 'user[password]', with: 'password'
click_button 'Submit'
end
一つの申し込みページに複数のアコーディオン
scenario単位でリトライしても複数のうちどこかで
落ちる
特定のexpecだけリトライしたい
expect(page).to have_content 'hoge'
find('label[for=have_bill]').click
expect(find('have_bill_element')).to be_visible
expect(page).to have_content 'fuga'
なかったので作りました。
こんな感じで使います。
retry_ex(count: 3) do
find('label[for=have_bill]').click
expect(find('have_bill_element')).to be_visible
end
実装のポイント
RSpec3.3から導入されたaggregate_faiulresを参考
def run
@counter += 1
yield
rescue RSpec::Expectations::ExpectationNotMetError => e
retry if @counter < count
raise e
end
https://github.com/yuyasat/rspec-retry_ex/blob/master/lib/rspec/retry_ex/retry_handler.rb
まとめ
・CIで落ちたり落ちなかったりするテストに2種類のリトライ機
構で対応
・scenario単位でのリトライできるgemはあった
が、expect単位でリトライできるgemはなかっ
たため、rspec-retry_exというgemを自作
・CIでテストが安定して通るようになった
・ブログ記事
ご清聴ありがとうございました。

More Related Content

What's hot

Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則勇 中津留
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!masakazu matsubara
 
Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用amkt922
 
ROS搭載ラズパイでLチカしてみる
ROS搭載ラズパイでLチカしてみるROS搭載ラズパイでLチカしてみる
ROS搭載ラズパイでLチカしてみるmozyanari
 
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価Hirokazu Onomichi
 
Potato03 KotlinでAndroidアプリ開発(後編)
Potato03 KotlinでAndroidアプリ開発(後編)Potato03 KotlinでAndroidアプリ開発(後編)
Potato03 KotlinでAndroidアプリ開発(後編)Toshihiro Yagi
 
デレ劇コマ割りするすごい奴
デレ劇コマ割りするすごい奴デレ劇コマ割りするすごい奴
デレ劇コマ割りするすごい奴Kenta Miyachi
 
擬似乱数生成器の評価
擬似乱数生成器の評価擬似乱数生成器の評価
擬似乱数生成器の評価Taku Miyakawa
 
富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編Kentaro Inomata
 
generator of call a storm web service
generator of call a storm web servicegenerator of call a storm web service
generator of call a storm web serviceNNN kakimoto
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方三七男 山本
 
なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話ota42y
 
KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話shinnosuke kugimiya
 
Riot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tipsRiot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tipsKeisuke Imai
 
SAKURAボードでお手軽マルチタスク環境
SAKURAボードでお手軽マルチタスク環境SAKURAボードでお手軽マルチタスク環境
SAKURAボードでお手軽マルチタスク環境Bizan Nishimura
 

What's hot (20)

Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
 
Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用
 
Walking front end
Walking front endWalking front end
Walking front end
 
ROS搭載ラズパイでLチカしてみる
ROS搭載ラズパイでLチカしてみるROS搭載ラズパイでLチカしてみる
ROS搭載ラズパイでLチカしてみる
 
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
 
Scala.js
Scala.jsScala.js
Scala.js
 
Potato03 KotlinでAndroidアプリ開発(後編)
Potato03 KotlinでAndroidアプリ開発(後編)Potato03 KotlinでAndroidアプリ開発(後編)
Potato03 KotlinでAndroidアプリ開発(後編)
 
デレ劇コマ割りするすごい奴
デレ劇コマ割りするすごい奴デレ劇コマ割りするすごい奴
デレ劇コマ割りするすごい奴
 
それRxJSでできるよ
それRxJSでできるよそれRxJSでできるよ
それRxJSでできるよ
 
擬似乱数生成器の評価
擬似乱数生成器の評価擬似乱数生成器の評価
擬似乱数生成器の評価
 
富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編
 
generator of call a storm web service
generator of call a storm web servicegenerator of call a storm web service
generator of call a storm web service
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方
 
なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話
 
KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話
 
Riot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tipsRiot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tips
 
SAKURAボードでお手軽マルチタスク環境
SAKURAボードでお手軽マルチタスク環境SAKURAボードでお手軽マルチタスク環境
SAKURAボードでお手軽マルチタスク環境
 
Source kittenについて
Source kittenについてSource kittenについて
Source kittenについて
 

Similar to ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介

Randomly Failing Specs
Randomly Failing SpecsRandomly Failing Specs
Randomly Failing Specssinsoku listy
 
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話Yuya Taki
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編Kazuya Numata
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-Jun Saeki
 
いまさらツリー構造
いまさらツリー構造いまさらツリー構造
いまさらツリー構造Yuya Taki
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails Kohei Ito
 
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてReact componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてHoso michi
 
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみるasa88
 

Similar to ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介 (8)

Randomly Failing Specs
Randomly Failing SpecsRandomly Failing Specs
Randomly Failing Specs
 
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-
 
いまさらツリー構造
いまさらツリー構造いまさらツリー構造
いまさらツリー構造
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails
 
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてReact componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけて
 
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
 

ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介