かなり久しぶりにSelenium + Capybara + Minitestの組み合わせでE2Eテストをやってるのですが、テストに成功した場合と失敗した場合とで処理を分けたかったのでやってみました。

環境


  • Minitest 5.10.2
  • Ruby 2.4.1

やり方


Seleniumを使用してこのサイトを開いて「酔っ払いITエンジニア」の文字が含まれていれば成功とします。存在しない文字を含んでいれば失敗とします。今回はサンプルなので成功するケースtest_blog_oneと失敗するケースtest_blog_twoを作成しました。

なお、require前書いた記事で作ったtest_helper.rbをロードしています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# coding: utf-8
require '../test_helper'

class BlogTest < Minitest::Capybara::Test

# 各テストパターン開始時に実行される
def setup
# ブラウザーを最大化する
page.driver.browser.manage.window.maximize
end

# 各テストパターン終了時に実行される
def teardown
if(passed?)
puts "OK"
elsif
puts "NG"
end
end

def test_blog_one
visit "https://yoshinorin.net"
assert_content "酔っ払いITエンジニア"

sleep 2
end

def test_blog_two
visit "https://yoshinorin.net"
assert_content "素面ITエンジニア"

sleep 2
end
end

さて、テスト失敗したかどうかはpassed?メソッドで確認できます。ですのでteardownでこのメソッドを呼んで条件分岐させればOKです。teardownは各テストパターン終了時に実行されます。

今回はテスト成功時はOKの文字を表示し、失敗時はNGを表示するようにしてみました。

実行してみる


後はこいつをblog_test.rbという名前で保存して実行します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ruby blog_test.rb

NG
BlogTest
two

Expected to find text "素面ITエンジニア" in "YoshinoriN インフラからフロ...(長いので省略)

OK
BlogTest
one

2 tests run in 14.524706 seconds.
Errors: 0 | Failures: 1 | Skips: 0

Focus on failing tests:
ruby blog_test.rb -l 25

上記のような感じで成功のパターンはOKと表示されて、失敗のパターンはNGと表示されますね。