Skip to content

Commit dc82cfe

Browse files
committed
Add more specs for #expect_raises
1 parent 874e034 commit dc82cfe

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

spec/std/spec/expectations_spec.cr

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,62 @@ describe "expectations" do
169169
end
170170

171171
describe "expect_raises" do
172-
it "pass if raises MyError" do
172+
it "passes if expected message equals actual message and expected class equals actual class" do
173173
expect_raises(Exception, "Ops") { raise Exception.new("Ops") }
174174
end
175175

176+
it "passes if expected message equals actual message and expected class is an ancestor of actual class" do
177+
expect_raises(Exception, "Ops") { raise ArgumentError.new("Ops") }
178+
end
179+
180+
it "passes if expected regex matches actual message and expected class equals actual class" do
181+
expect_raises(Exception, /Ops/) { raise Exception.new("Ops") }
182+
end
183+
184+
it "passes if expected regex matches actual message and expected class is an ancestor of actual class" do
185+
expect_raises(Exception, /Ops/) { raise ArgumentError.new("Ops") }
186+
end
187+
188+
it "passes if given no message expectation and expected class equals actual class" do
189+
expect_raises(Exception) { raise Exception.new("Ops") }
190+
end
191+
192+
it "passes if given no message expectation and expected class is an ancestor of actual class" do
193+
expect_raises(Exception) { raise ArgumentError.new("Ops") }
194+
end
195+
196+
it "fails if expected message does not equal actual message and expected class equals actual class" do
197+
expect_raises(Exception, "Ops") { raise Exception.new("Hm") }
198+
rescue Spec::AssertionFailed
199+
# success
200+
else
201+
raise "expected Spec::AssertionFailed but nothing was raised"
202+
end
203+
204+
it "fails if expected regex does not match actual message and expected class equals actual class" do
205+
expect_raises(Exception, /Ops/) { raise Exception.new("Hm") }
206+
rescue Spec::AssertionFailed
207+
# success
208+
else
209+
raise "expected Spec::AssertionFailed but nothing was raised"
210+
end
211+
212+
it "fails if given no message expectation and expected class does not equal and is not an ancestor of actual class" do
213+
expect_raises(IndexError) { raise ArgumentError.new("Ops") }
214+
rescue Spec::AssertionFailed
215+
# success
216+
else
217+
raise "expected Spec::AssertionFailed but nothing was raised"
218+
end
219+
220+
it "fails if nothing was raised" do
221+
expect_raises(IndexError) { raise ArgumentError.new("Ops") }
222+
rescue Spec::AssertionFailed
223+
# success
224+
else
225+
raise "expected Spec::AssertionFailed but nothing was raised"
226+
end
227+
176228
describe "failure message format" do
177229
context "given string to compare with message" do
178230
it "contains expected exception, actual exception and backtrace" do
@@ -265,6 +317,16 @@ describe "expectations" do
265317
raise "nothing is raised"
266318
end
267319
end
320+
321+
context "nothing was raises" do
322+
it "contains expected class" do
323+
expect_raises(IndexError) { }
324+
rescue e : Spec::AssertionFailed
325+
e.message.as(String).should contain("Expected IndexError but nothing was raised")
326+
else
327+
raise "expected Spec::AssertionFailed but nothing was raised"
328+
end
329+
end
268330
end
269331
end
270332
end

0 commit comments

Comments
 (0)