Apa sintaks yang diharapkan untuk memeriksa pesan pengecualian di MiniTest's assert_raises
/ must_raise
?
Saya mencoba membuat pernyataan seperti berikut, di mana "Foo"
pesan kesalahan yang diharapkan:
proc { bar.do_it }.must_raise RuntimeError.new("Foo")
Jawaban:
Anda dapat menggunakan
assert_raises
pernyataan, ataumust_raise
ekspektasi.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
Jika Anda perlu menguji sesuatu pada objek kesalahan, Anda bisa mendapatkannya dari pernyataan atau ekspektasi seperti:
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
sumber
Minitest::Spec
dan tidakMinitest::Test
. Spec DSL, termasuk ekspektasi, hanya tersedia saat menggunakanMinitest::Spec
.Untuk menegaskan pengecualian:
assert_raises FooError do bar.do_it end
Untuk menegaskan pesan pengecualian:
Sesuai dengan dokumen API ,
assert_raises
kembalikan pengecualian yang cocok sehingga Anda dapat memeriksa pesan, atribut, dll.exception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message)
sumber
Minitest tidak memberi Anda cara untuk memeriksa pesan pengecualian yang sebenarnya. Tapi Anda bisa menambahkan metode helper yang melakukannya dan memperluas
ActiveSupport::TestCase
kelas untuk digunakan di mana pun di rangkaian pengujian rails Anda, misalnya: intest_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
dan gunakan dalam pengujian Anda seperti:
assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message end
sumber
must_raise
karena ini memberi Anda contoh kesalahan sehingga Anda dapat memeriksa pesan itu sendiri.must_raise
sebelumnya.Untuk menambahkan beberapa perkembangan terbaru, ada beberapa diskusi tentang menambah
assert_raises_with_message
minitest di masa lalu tanpa banyak keberuntungan.Saat ini, ada permintaan tarik yang menjanjikan menunggu untuk digabungkan. Jika dan saat digabungkan, kami akan dapat menggunakan
assert_raises_with_message
tanpa harus menentukannya sendiri.Sementara itu, ada permata kecil yang berguna bernama minitest-bonus-assertions yang mendefinisikan dengan tepat metode itu, bersama dengan beberapa lainnya, sehingga Anda dapat menggunakannya di luar kotak. Lihat dokumen untuk informasi lebih lanjut.
sumber