Rspec-writing-specs
RSpec-仕様の作成
この章では、新しいRubyクラスを作成し、独自のファイルに保存し、このクラスをテストするための個別の仕様ファイルを作成します。
まず、新しいクラスでは、 StringAnalyzer と呼ばれます。 単純なクラスで、ご想像のとおり、文字列を分析します。 このクラスには、* has_vowels?というメソッドが1つしかありません。このメソッドは、その名前が示すとおり、文字列に母音が含まれる場合はtrueを、含まれない場合はfalseを返します。 *StringAnalyzer の実装は次のとおりです-
class StringAnalyzer
def has_vowels?(str)
!!(str =~/[aeio]+/i)
end
end
HelloWorldセクションに従っている場合、C:\ rspec_tutorial \ specというフォルダーを作成しました。
hello_world.rbファイルがある場合は削除し、上記のStringAnalyzerコードをC:\ rspec_tutorial \ specフォルダーのstring_analyzer.rbというファイルに保存します。
StringAnalyzerをテストするためのspecファイルのソースは次のとおりです-
require 'string_analyzer'
describe StringAnalyzer do
context "With valid input" do
it "should detect when a string contains vowels" do
sa = StringAnalyzer.new
test_string = 'uuu'
expect(sa.has_vowels? test_string).to be true
end
it "should detect when a string doesn't contain vowels" do
sa = StringAnalyzer.new
test_string = 'bcdfg'
expect(sa.has_vowels? test_string).to be false
end
end
end
これを同じspecディレクトリに保存し、string_analyzer_test.rbという名前を付けます。
cmd.exeウィンドウで、C:\ rspec_tutorialフォルダーに移動し、次のコマンドを実行します:dir spec
次が表示されるはずです-
C:\ rspec_tutorial \ specのディレクトリ
09/13/2015 08:22 AM <DIR> .
09/13/2015 08:22 AM <DIR> ..
09/12/2015 11:44 PM 81 string_analyzer.rb
09/12/2015 11:46 PM 451 string_analyzer_test.rb
次に、テストを実行します。次のコマンドを実行します:rspec spec
フォルダーの名前を rspec に渡すと、フォルダー内のすべてのspecファイルが実行されます。 この結果が表示されるはずです-
No examples found.
Finished in 0 seconds (files took 0.068 seconds to load)
0 examples, 0 failures
これが発生した理由は、デフォルトでは、 rspec は名前が「_spec.rb」で終わるファイルのみを実行するためです。 string_analyzer_test.rbの名前をstring_analyzer_spec.rbに変更します。 あなたはこのコマンドを実行することで簡単にそれを行うことができます-
ren spec\string_analyzer_test.rb string_analyzer_spec.rb
さて、もう一度 rspec specを実行すると、次のような出力が表示されるはずです-
F.
Failures:
1) StringAnalyzer With valid input should detect when a string contains vowels
Failure/Error: expect(sa.has_vowels? test_string).to be true
expected true
got false
# ./spec/string_analyzer_spec.rb:9:in `block (3 levels) in <top (required)>'
Finished in 0.015 seconds (files took 0.12201 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./spec/string_analyzer_spec.rb:6 # StringAnalyzer With valid
input should detect when a string contains vowels
Do you see what just happened? Our spec failed because we have a bug in
StringAnalyzer. The bug is simple to fix, open up string_analyzer.rb
in a text editor and change this line:
!!(str =~/[aeio]+/i)
to this:
!!(str =~/[aeiou]+/i)
さて、string_analyizer.rbで行った変更を保存し、rspec specコマンドを再度実行すると、次のような出力が表示されるはずです-
..
Finished in 0.002 seconds (files took 0.11401 seconds to load)
2 examples, 0 failures
おめでとうございます、specファイルの例(テスト)は合格です。 母音メソッドを持つ正規表現のバグを修正しましたが、テストは完全ではありません。
has vowelsメソッドを使用してさまざまなタイプの入力文字列をテストする例をさらに追加することは理にかなっています。
次の表は、新しい例で追加できる置換の一部を示しています(ブロックします)。
Input string | Description | Expected result with has_vowels? |
---|---|---|
‘aaa’, ‘eee’, ‘iii’, ‘o’ | Only one vowel and no other letters. | true |
‘abcefg’ | ‘At least one vowel and some consonants’ | true |
‘mnklp’ | Only consonants. | false |
‘’ | Empty string (no letters) | false |
‘abcde55345&??’ | Vowels, consonants, numbers and punctuation characters. | true |
‘423432%%%^&’ | Numbers and punctuation characters only. | false |
‘AEIOU’ | Upper case vowels only. | true |
‘AeiOuuuA’ | Upper case and lower vowels only. | true |
‘AbCdEfghI’ | Upper and lower case vowels and consonants. | true |
‘BCDFG’ | Upper case consonants only. | false |
‘ ‘ | Whitespace characters only. | false |
スペックファイルに追加するサンプルを決定するのはユーザー次第です。 テストする条件は多数ありますが、最も重要な条件のサブセットを特定し、コードを最適にテストする必要があります。
*rspec* コマンドにはさまざまなオプションがあり、それらをすべて表示するには、 *rspec* -helpと入力します。 次の表に、最も一般的なオプションとその機能の説明を示します。
Sr.No. | Option/flag & Description |
---|---|
1 |
-I PATH Rubyのソースファイルを探すときに rspec が使用するロード(必須)パスにPATHを追加します。 |
2 |
-r, --require PATH 仕様に必要な特定のソースファイルを追加します。 ファイル。 |
3 |
--fail-fast このオプションを使用すると、rspecは最初の例が失敗した後に仕様の実行を停止します。 デフォルトでは、rspecは、失敗の数に関係なく、指定されたすべてのspecファイルを実行します。 |
4 |
-f, --format FORMATTER このオプションを使用すると、さまざまな出力形式を指定できます。 出力形式の詳細については、フォーマッターのセクションを参照してください。 |
5 |
-o, --out FILE このオプションは、テスト結果を標準出力ではなく出力ファイルFILEに書き込むようにrspecに指示します。 |
6 |
-c, --color rspecの出力で色を有効にします。 成功例の結果は緑色のテキストで表示され、失敗は赤色のテキストで印刷されます。 |
7 |
-b, --backtrace rspecの出力に完全なエラーバックトレースを表示します。 |
8 |
-w, --warnings rspecの出力にRubyの警告を表示します。 |
9 |
-P, --pattern PATTERN パターンPATTERNに一致する仕様ファイルをロードして実行します。 たとえば、-p“ *.rb”を渡すと、rspecは“ _spec.rb”で終わるファイルだけでなく、すべてのRubyファイルを実行します。 |
10 |
このオプションは、説明にテキストSTRINGを含むすべての例を実行するようにrspecに指示します。 |
11 |
-t, --tag TAG このオプションを使用すると、rspecはタグTAGを含むサンプルのみを実行します。 TAGはRubyシンボルとして指定されていることに注意してください。 詳細については、RSpecタグのセクションを参照してください。 |