Jaka jest oczekiwana składnia do sprawdzania komunikatów o wyjątkach w assert_raises
/ must_raise
?
Próbuję utworzyć asercję podobną do poniższej, gdzie "Foo"
jest oczekiwany komunikat o błędzie:
proc { bar.do_it }.must_raise RuntimeError.new("Foo")
Odpowiedzi:
Możesz użyć
assert_raises
twierdzenia lubmust_raise
oczekiwania.it "must raise" do assert_raises RuntimeError do bar.do_it end -> { bar.do_it }.must_raise RuntimeError lambda { bar.do_it }.must_raise RuntimeError proc { bar.do_it }.must_raise RuntimeError end
Jeśli chcesz coś przetestować na obiekcie błędu, możesz to uzyskać z asercji lub oczekiwania w następujący sposób:
describe "testing the error object" do it "as an assertion" do err = assert_raises RuntimeError { bar.do_it } assert_match /Foo/, err.message end it "as an exception" do err = ->{ bar.do_it }.must_raise RuntimeError err.message.must_match /Foo/ end end
źródło
Minitest::Spec
a nieMinitest::Test
. Spec DSL, w tym oczekiwania, są dostępne tylko podczas używaniaMinitest::Spec
.Aby zgłosić wyjątek:
assert_raises FooError do bar.do_it end
Aby potwierdzić komunikat o wyjątku:
Zgodnie API doc ,
assert_raises
zwraca wyjątek dopasowane, dzięki czemu można sprawdzić wiadomość, atrybuty itpexception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message)
źródło
Program Minitest nie zapewnia (jeszcze) sposobu sprawdzenia rzeczywistego komunikatu o wyjątku. Ale możesz dodać metodę pomocniczą, która to robi i rozszerzyć
ActiveSupport::TestCase
klasę tak, aby była używana wszędzie w zestawie testów rails, np. Wtest_helper.rb
class ActiveSupport::TestCase def assert_raises_with_message(exception, msg, &block) block.call rescue exception => e assert_match msg, e.message else raise "Expected to raise #{exception} w/ message #{msg}, none raised" end end
i używaj go w swoich testach, takich jak:
assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message end
źródło
must_raise
ponieważ podaje wystąpienie błędu, dzięki czemu możesz samodzielnie sprawdzić komunikat.must_raise
.Aby dodać trochę nowszych osiągnięć, w przeszłości toczyły się dyskusje na temat dodawania
assert_raises_with_message
do minitest bez większego szczęścia.Obecnie na scalenie czeka obiecujące żądanie ściągnięcia . Jeśli i kiedy zostanie scalony, będziemy mogli z niego korzystać
assert_raises_with_message
bez konieczności samodzielnego definiowania.W międzyczasie jest ten poręczny mały klejnot o nazwie minitest-bonus-assertions, który definiuje dokładnie tę metodę wraz z kilkoma innymi, dzięki czemu można jej używać po wyjęciu z pudełka. Więcej informacji można znaleźć w dokumentacji .
źródło