コンソールへの出力をテストするのはちょっと面倒なので、
テスト対象のプログラムをテストしやすいように書き換えます。
sample1.rb
lang
1# coding: utf-8
2
3def parse_argv(argv)
4 if argv.count == 0
5 'nothing'
6 elsif argv[0] =~ /\A\d+\z/
7 argv[0].to_i * 6
8 else
9 "#{argv[0]}abcb"
10 end
11end
12
13if __FILE__ == $PROGRAM_NAME
14 puts parse_argv ARGV
15end
この sample1.rb 中の parse_argv メソッドのテストを書くことにします。
spec/sample1_spec.rb
lang
1# coding: utf-8
2
3require './sample1.rb'
4
5describe 'Sample1 parse_argv' do
6 it '引数が無い場合' do
7 expect(parse_argv([])).to eq('nothing')
8 end
9
10 it "引数が1つの数字" do
11 expect(parse_argv(['123'])).to eq(123 * 6)
12 end
13
14 it "引数が1つの文字" do
15 expect(parse_argv(["123A"])).to eq('123Aabcb')
16 end
17
18end
実行結果例です。
$ rspec sample1_spec.rb
rspec
...
Finished in 0.00137 seconds (files took 0.17877 seconds to load)
3 examples, 0 failures
katoy-no-MacBook-Pro-2:rspec_x katoy$ rspec
...
Finished in 0.00159 seconds (files took 0.17147 seconds to load)
3 examples, 0 failures
エラーが起こるように sample1_spec.rb を書き換えてから実行してみます。
$ rspec
..F
Failures:
1) Sample1 prase_argv 引数が1つの文字
Failure/Error: expect(parse_argv(["123A"])).to eq('123Aabcbx')
expected: "123Aabcbx"
got: "123Aabcb"
(compared using ==)
# ./spec/sample1_spec.rb:15:in `block (2 levels) in <top (required)>'
Finished in 0.00151 seconds (files took 0.17233 seconds to load)
3 examples, 1 failure
Failed examples:
rspec ./spec/sample1_spec.rb:14 # Sample1 prase_argv 引数が1つの文字
参考:
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。