Skip to content

Commit 3cbcc1d

Browse files
committed
Provide better failure messages for include_json matcher. Addresses issue #45
1 parent 50424a8 commit 3cbcc1d

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

lib/json_spec/matchers/include_json.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@ class IncludeJson
55
include JsonSpec::Exclusion
66
include JsonSpec::Messages
77

8+
attr_reader :actual_json
9+
810
def initialize(expected_json = nil)
911
@expected_json = expected_json
1012
end
1113

1214
def matches?(actual_json)
1315
raise "Expected included JSON not provided" if @expected_json.nil?
1416

17+
self.actual_json = actual_json
18+
1519
actual = parse_json(actual_json, @path)
1620
expected = exclude_keys(parse_json(@expected_json))
1721
case actual
@@ -43,18 +47,24 @@ def including(*keys)
4347
end
4448

4549
def failure_message
46-
message_with_path("Expected included JSON")
50+
message_with_path("Expected #{actual_json} to include #{@expected_json}")
4751
end
4852
alias :failure_message_for_should :failure_message
4953

5054
def failure_message_when_negated
51-
message_with_path("Expected excluded JSON")
55+
message_with_path("Expected #{actual_json} to exclude #{@expected_json}")
5256
end
5357
alias :failure_message_for_should_not :failure_message_when_negated
5458

5559
def description
5660
message_with_path("include JSON")
5761
end
62+
63+
private
64+
65+
def actual_json=(json)
66+
@actual_json = json
67+
end
5868
end
5969
end
6070
end

spec/json_spec/matchers/include_json_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@
7171
matcher.description.should == %(include JSON at path "json/0")
7272
end
7373

74+
it "provides a useful failure message for should" do
75+
actual = %({"ids": [1,2,3]})
76+
expected = %({"ids": [4,5,6]})
77+
matcher = include_json(expected)
78+
matcher.matches?(actual)
79+
matcher.failure_message_for_should.should == "Expected #{actual} to include #{expected}"
80+
end
81+
82+
it "provides a useful failure message for should not" do
83+
actual = %({"ids": [1,2,3]})
84+
expected = actual
85+
matcher = include_json(expected)
86+
matcher.matches?(actual)
87+
matcher.failure_message_for_should_not.should == "Expected #{actual} to exclude #{expected}"
88+
end
89+
7490
it "raises an error when not given expected JSON" do
7591
expect{ %([{"id":1,"two":3}]).should include_json }.to raise_error
7692
end

0 commit comments

Comments
 (0)