Skip to content

Commit fba3a64

Browse files
valscionlgebhardt
authored andcommitted
Add better debuggability to be_X test failures (venuu#134)
* Add better debuggability to be_X test failures This way test failures will show what the HTTP status code actually was when test fails as well as output the entire response body. The response body will most likely contain vital debugging information to help figure out why the test failed * Output last request information on spec failures
1 parent c26b13a commit fba3a64

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

spec/support/custom_matchers.rb

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Add better debuggability to be_forbidden failures
2+
RSpec::Matchers.define :be_forbidden do
3+
match(&:forbidden?)
4+
5+
failure_message do |actual|
6+
debug_text_for_failure('forbidden', response: actual, last_request: last_request)
7+
end
8+
end
9+
10+
# Add better debuggability to be_not_found failures
11+
RSpec::Matchers.define :be_not_found do
12+
match(&:not_found?)
13+
14+
failure_message do |actual|
15+
debug_text_for_failure('not_found', response: actual, last_request: last_request)
16+
end
17+
end
18+
19+
# Add better debuggability to be_unprocessable failures
20+
RSpec::Matchers.define :be_unprocessable do
21+
match(&:unprocessable?)
22+
23+
failure_message do |actual|
24+
debug_text_for_failure('unprocessable', response: actual, last_request: last_request)
25+
end
26+
end
27+
28+
# Add better debuggability to be_successful failures
29+
RSpec::Matchers.define :be_successful do
30+
match(&:successful?)
31+
32+
failure_message do |actual|
33+
debug_text_for_failure('successful', response: actual, last_request: last_request)
34+
end
35+
end
36+
37+
# Add better debuggability to be_ok failures
38+
RSpec::Matchers.define :be_ok do
39+
match(&:ok?)
40+
41+
failure_message do |actual|
42+
debug_text_for_failure('ok', response: actual, last_request: last_request)
43+
end
44+
end
45+
46+
def debug_text_for_failure(expected, response:, last_request:)
47+
debug_text = "expected response to be #{expected} but HTTP code was #{response.status}."
48+
debug_text += " Last request was #{last_request.request_method} to #{last_request.fullpath}"
49+
unless last_request.get?
50+
debug_text += " with body:\n" + last_request.body.read
51+
end
52+
debug_text += "\nResponse body was:\n" + response.body
53+
debug_text
54+
end

0 commit comments

Comments
 (0)