メインコンテンツまでスキップ

throw_symbol マッチャー

throw_symbol マッチャーは、コードブロックがシンボルをスローすることを指定するために使用されます。最も基本的な形式では、任意のシンボルがスローされた場合にパスします。

expect { throw :foo }.to throw_symbol

特定のシンボルがスローされることを指定したい場合は、次のようにします。

expect { throw :foo }.to throw_symbol(:foo)

throw に与えられる追加の引数についても気にする場合は、次のように指定できます。

expect { throw :foo, 7 }.to throw_symbol(:foo, 7)

基本的な使用法

次の内容で "throw_symbol_matcher_spec.rb" という名前のファイルがあるとします。

RSpec.describe "throw" do
specify { expect { throw :foo }.to throw_symbol }
specify { expect { throw :bar, 7 }.to throw_symbol }
specify { expect { 5 + 5 }.not_to throw_symbol }

# deliberate failures
specify { expect { throw :foo }.not_to throw_symbol }
specify { expect { throw :bar, 7 }.not_to throw_symbol }
specify { expect { 5 + 5 }.to throw_symbol }
end

次のコマンドを実行すると:

rspec throw_symbol_matcher_spec.rb

出力には、次のすべてが含まれている必要があります:

| 6 つの例、3 つの失敗 | | 期待されるシンボルがスローされないことを期待しましたが、:foo が得られました | | 期待されるシンボルがスローされないことを期待しましたが、:bar が得られました | | 期待されるシンボルがスローされることを期待しましたが、何も得られませんでした |

スローされるシンボルを指定する

次の内容で "throw_symbol_matcher_spec.rb" という名前のファイルがあるとします。

RSpec.describe "throw symbol" do
specify { expect { throw :foo }.to throw_symbol(:foo) }
specify { expect { throw :foo, 7 }.to throw_symbol(:foo) }
specify { expect { 5 + 5 }.not_to throw_symbol(:foo) }
specify { expect { throw :bar }.not_to throw_symbol(:foo) }

# deliberate failures
specify { expect { throw :foo }.not_to throw_symbol(:foo) }
specify { expect { throw :foo, 7 }.not_to throw_symbol(:foo) }
specify { expect { 5 + 5 }.to throw_symbol(:foo) }
specify { expect { throw :bar }.to throw_symbol(:foo) }
end

次のコマンドを実行すると:

rspec throw_symbol_matcher_spec.rb

出力には、次のすべてが含まれている必要があります:

| 8 つの例、4 つの失敗 | | 期待される :foo がスローされないことを期待しましたが、:foo が得られました | | 期待される :foo がスローされないことを期待しましたが、:foo with 7 が得られました | | 期待される :foo がスローされることを期待しましたが、何も得られませんでした | | 期待される :foo がスローされることを期待しましたが、:bar が得られました |

スローされるシンボルと引数を指定する

次の内容で "throw_symbol_argument_matcher_spec.rb" という名前のファイルがあるとします。

RSpec.describe "throw symbol with argument" do
specify { expect { throw :foo, 7 }.to throw_symbol(:foo, 7) }
specify { expect { throw :foo, 8 }.not_to throw_symbol(:foo, 7) }
specify { expect { throw :bar, 7 }.not_to throw_symbol(:foo, 7) }
specify { expect { throw :foo }.not_to throw_symbol(:foo, 7) }

# deliberate failures
specify { expect { throw :foo, 7 }.not_to throw_symbol(:foo, 7) }
specify { expect { throw :foo, 8 }.to throw_symbol(:foo, 7) }
specify { expect { throw :bar, 7 }.to throw_symbol(:foo, 7) }
specify { expect { throw :foo }.to throw_symbol(:foo, 7) }
end

次のコマンドを実行すると:

rspec throw_symbol_argument_matcher_spec.rb

出力には、次のすべてが含まれている必要があります:

| 8 つの例、4 つの失敗 | | 期待される :foo with 7 がスローされないことを期待しましたが、:foo with 7 が得られました | | 期待される :foo with 7 がスローされることを期待しましたが、:foo with 8 が得られました | | 期待される :foo with 7 がスローされることを期待しましたが、:bar が得られました | | 期待される :foo with 7 がスローされることを期待しましたが、引数なしの :foo が得られました |