1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-08-24

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

実行結果

image.png

image.png

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0