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 が得られました |