(´-`).。oO(標準出力の『Hello』をお手軽に探したい。


Ruby初心者です。

今日は「Hello World」を出力するだけのrakeタスクを作りました。

# rake hoge:hello 
"Hello World"

結果に「Hello」が含まれていることを確認するテストを書いてて、簡潔に文字列指定で探せる方法があれば良いと思ったのですが。。。

コード

hoge_spec.rb
require 'rails_helper'
require 'rake'

RSpec.describe 'Hoge', type: :task do

  # 中略

  describe 'rake hoge:hello' do
    let(:task) { 'hoge:hello' }

    context '標準出力のHelloを探せ' do

      it '標準出力でHello #1 outputマッチャーの引数に文字列' do
        # ※理想型。ただし完全一致しないので失敗する。。。
        expect{ @rake[task].invoke() }.to output('Hello').to_stdout
      end

      it '標準出力でHello #2 outputマッチャーの引数に正規表現' do
        # ※うまくいくけど正規表現のマッチ使いにくい。。。
        expect{ @rake[task].invoke() }.to output(/Hello/).to_stdout
      end

      it '標準出力でHello #3 includeで部分一致' do
        # ※うまくいくけどコードが長い。。。
        $stdout = StringIO.new
        @rake[task].invoke()
        output_text = $stdout.string
        $stdout = STDOUT
        expect(output_text).to include 'Hello'
      end
    end
  end

end

実行結果

・・・文字列指定(#1)でできたら良いなと思ってたのですがエラー。
目的を実現するには正規表現(#2)にするか標準出力を変数に代入する(#3)しか方法が見つからず。。。
何か良い方法がないものかと思ってます。