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 个失败
预期没有抛出 Symbol,得到了 :foo
预期没有抛出 Symbol,得到了 :bar
预期抛出 Symbol,得到了 nothing

指定抛出的符号

给定一个名为“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 被抛出,得到了 nothing
预期 :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 with no argument