Javaエンジニア、Ruby on Railsでアプリを作る

整理券アプリを作成中です

RubyMineでminitestを実行する

今、『プロを目指す人のためのRuby入門』(伊藤淳一[著])を読んでるんですが、使用するテストフレームワークminitestなのですよね。

RubyMineでminitestを追加しようとしたら、”New”の一覧にもないし、とりあえず手動でファイル作って

require 'minitest/autorun'

と書いてみたら”そんなファイルないよ”とのエラーが出ました。

f:id:yucatio:20180612114010p:plain

f:id:yucatio:20180612114019p:plain

公式ドキュメント見たら、minitestの実行要件が載っていたのでその通りにします。

Minitest - Help | RubyMine

と言っても、詳細な手順はさすがに載っていなくて、久々にrubyをさわったらBundlerの使い方を忘れていたので、詳細な手順を残しておきます。

Bundle Init

Tools > Bundler > Init でBundlerを初期化します。

f:id:yucatio:20180612120255p:plain

GemFileの書き換え

GemFileが作成されたので、下記を追加します。

group :test do
    gem "minitest"
    gem 'minitest-reporters', '>= 0.5.0'
end

minitest-reportersは、minitest のバージョンが 5.0.0ならばインストールは必須ではないのですが、入れておくとテスト結果をツリー状に表示してくれるので、追加するのがおすすめです。(Important noteに書いてある)

公式ドキュメントには、'cucumber-rails'も書かれていますが、今回は必要ないので外しています。

Bundle Install

Tools > Bundler > Install を選択して、gemをインストールします。

f:id:yucatio:20180612121439p:plain

これでminitestを使用する準備が整いました。

テストファイル作成

“New”メニューにminitestのテンプレートが追加されるかと思いましたが、されませんでした。 テストファイルは、New > Ruby Class Template らへんから作ります。

minitestのテストファイルは、(拡張子を除いた部分が)_testで終わるか、test_で始まり、拡張子が.rbである必要があります。

また、テストクラス名はTestで終わる必要があります。

テストメソッドはtest_で始める必要があります。

ヘッダーはこんな感じ

require 'minitest/autorun'
require 'minitest/reporters'
MiniTest::Reporters.use!

テストクラスはMinitest::Testを継承します。

f:id:yucatio:20180612121741p:plain

テスト実行

テストの実行はソースコードの実行と同じようにファイル右クリック > Runでできます。testフォルダ右クリック > Run All Tests ..で全てのテストを実行可能です

f:id:yucatio:20180612135028p:plain

テスト実行結果です。テストを再実行したい場合は、左上の緑の三角ボタンを押します。

f:id:yucatio:20180612134439p:plain

環境

番外編

minitest-reportsをbundle installした直後に、以下のエラーが出ましたが、Rubymineを再起動したらエラーは出なくなりました。

`rescue in specs': Your bundle is locked to ansi (1.5.0), but that version could not be found in any of the sources listed in your Gemfile. If you haven't changed sources, that means the author of ansi (1.5.0) has removed it. You'll need to update your bundle to a different version of ansi (1.5.0) that hasn't been removed in order to install. (Bundler::GemNotFound)

f:id:yucatio:20180612125428p:plain

yucatio.hatenablog.com