DB接続が切れた時にエラーページを表示するなど、システムエラー発生時のテストをCucumberで書く際の覚書です。
TL; DR
- シナリオに
@allow-rescue
タグをつける -
feature/support/env.rb
でrequire 'cucumber/rspec/double'
する - Stepで
Hoge.stub(:huga).to_raise('piyo piyo')
を設定する- Cucumberは結合試験・受け入れ確認試験レベルのテストなので、Stub/Mockを使うべきケースは少ない。多用してはダメ。
kwsk
Stub/Mockを使って、例外発生の仕込みを作る
Rspecのように、stub/mockを利用して例外を発生するようにします。
features/support/env.rb
require 'cucumber/rspec/double'
features/step_definitions/your_app_steps.rb
Given '検索した時にDB接続エラーとなる' do
ActiveRecord::Base.stub(:postgresql_connection).to_raise(PG::ConnectionBad)
end
参考 : Mocking and Stubbing with Cucumber - cucumber | GitHub
そもそもこういうテストはRspecなりMiniTestのコントローラーテストやリクエストテストですべきなのでは? という考えもあり。
システムエラーしてもテストが止まらないようにする
通常、Cucumberテスト中に例外が発生した際は、問答無用でテストが失敗します。
例外発生を無視し、各ステップが通ればテスト成功とみなすように設定するのが@allow-rescue
です。
シナリオごとにつけてもよい。
# language: ja
@allow-rescue
フィーチャ: DB接続ができていない時は、エラーページを表示する
ユーザーにアナウンスを行う
背景:
前提 ユーザー検索した時にDB接続エラーとなる
シナリオ: なんか適当なシナリオ