rspec-json_expectations 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1983e0ca2363deb0443b471931f99b0d8d02dc1a
|
4
|
+
data.tar.gz: 71b98df45860660e1ec5d496657915ef33975b7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1ad5e58d0b7f8d27dab022070a7da4e2e6358fffa072e6196b8b98c8a67a1fd8a79d19ac3325d3b9ed8683bcf4b58390c83f7803bf749f1992053ab7d3229dc
|
7
|
+
data.tar.gz: 17ebe93df1ddbc066ce55d1908be380458bc9d84f300116395a99846f105764aa4eefb15c7ea2334c6a99fbe74b48def359c066270fabeed6e2dff8c6f84ff4b
|
@@ -0,0 +1,76 @@
|
|
1
|
+
Feature: RSpec matcher support for include_json matcher
|
2
|
+
|
3
|
+
As a developer extensively testing my APIs
|
4
|
+
I want to utilize the power of available RSpec matchers
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a file "spec/spec_helper.rb" with:
|
8
|
+
"""ruby
|
9
|
+
require "rspec"
|
10
|
+
require "rspec/expectations"
|
11
|
+
require "rspec/json_expectations"
|
12
|
+
"""
|
13
|
+
And a local "SIMPLE_JSON" with:
|
14
|
+
"""json
|
15
|
+
{
|
16
|
+
"id": 25,
|
17
|
+
"email": "john.smith@example.com",
|
18
|
+
"name": "John",
|
19
|
+
"score": 55
|
20
|
+
}
|
21
|
+
"""
|
22
|
+
|
23
|
+
Scenario: Expecting json string to include simple json using an rspec matcher
|
24
|
+
Given a file "spec/matcher_example_spec.rb" with:
|
25
|
+
"""ruby
|
26
|
+
require "spec_helper"
|
27
|
+
|
28
|
+
RSpec.describe "A json response" do
|
29
|
+
subject { '%{SIMPLE_JSON}' }
|
30
|
+
|
31
|
+
it "has basic info about user" do
|
32
|
+
expect(subject).to include_json(
|
33
|
+
id: 25,
|
34
|
+
email: "john.smith@example.com",
|
35
|
+
name: "John",
|
36
|
+
score: (be > 30)
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
"""
|
41
|
+
When I run "rspec spec/matcher_example_spec.rb"
|
42
|
+
Then I see:
|
43
|
+
"""
|
44
|
+
1 example, 0 failures
|
45
|
+
"""
|
46
|
+
|
47
|
+
Scenario: Expecting json string to include simple json using an rspec matcher with failure
|
48
|
+
Given a file "spec/matcher_example_fail_spec.rb" with:
|
49
|
+
"""ruby
|
50
|
+
require "spec_helper"
|
51
|
+
|
52
|
+
RSpec.describe "A json response" do
|
53
|
+
subject { '%{SIMPLE_JSON}' }
|
54
|
+
|
55
|
+
it "has basic info about user" do
|
56
|
+
matcher = be < 30
|
57
|
+
puts "\'matcher.inspect\'"
|
58
|
+
expect(subject).to include_json(
|
59
|
+
id: 25,
|
60
|
+
email: "john.smith@example.com",
|
61
|
+
name: "John",
|
62
|
+
score: (be < 30)
|
63
|
+
)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
"""
|
67
|
+
When I run "rspec spec/matcher_example_fail_spec.rb"
|
68
|
+
Then I see:
|
69
|
+
"""
|
70
|
+
expected: "be < 30"
|
71
|
+
got: 55
|
72
|
+
"""
|
73
|
+
And I see:
|
74
|
+
"""
|
75
|
+
1 example, 1 failure
|
76
|
+
"""
|
@@ -8,7 +8,8 @@ module RSpec
|
|
8
8
|
# json atom paths.
|
9
9
|
class JsonTraverser
|
10
10
|
HANDLED_BY_SIMPLE_VALUE_HANDLER = [String, Numeric, FalseClass, TrueClass, NilClass]
|
11
|
-
|
11
|
+
RSPECMATCHERS = defined?(RSpec::Matchers) ? [RSpec::Matchers::BuiltIn::BaseMatcher] : []
|
12
|
+
SUPPORTED_VALUES = [Hash, Regexp, Array] + HANDLED_BY_SIMPLE_VALUE_HANDLER + RSPECMATCHERS
|
12
13
|
|
13
14
|
class << self
|
14
15
|
def traverse(errors, expected, actual, negate=false, prefix=[])
|
@@ -17,6 +18,7 @@ module RSpec
|
|
17
18
|
handle_array(errors, expected, actual, negate, prefix),
|
18
19
|
handle_value(errors, expected, actual, negate, prefix),
|
19
20
|
handle_regex(errors, expected, actual, negate, prefix),
|
21
|
+
handle_rspec_matcher(errors, expected, actual, negate, prefix),
|
20
22
|
handle_unsupported(expected)
|
21
23
|
].any?
|
22
24
|
end
|
@@ -80,6 +82,21 @@ module RSpec
|
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
85
|
+
def handle_rspec_matcher(errors, expected, actual, negate=false, prefix=[])
|
86
|
+
return nil unless defined?(RSpec::Matchers)
|
87
|
+
return nil unless expected.is_a?(RSpec::Matchers::BuiltIn::BaseMatcher)
|
88
|
+
|
89
|
+
if conditionally_negate(!!expected.matches?(actual), negate)
|
90
|
+
true
|
91
|
+
else
|
92
|
+
errors[prefix.join("/")] = {
|
93
|
+
actual: actual,
|
94
|
+
expected: expected.description
|
95
|
+
}
|
96
|
+
false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
83
100
|
def handle_unsupported(expected)
|
84
101
|
unless SUPPORTED_VALUES.any? { |type| expected.is_a?(type) }
|
85
102
|
raise NotImplementedError,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-json_expectations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Fedorov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- features/rspec/json_expectations/negation_matching.feature
|
62
62
|
- features/rspec/json_expectations/nested_json_support.feature
|
63
63
|
- features/rspec/json_expectations/regular_expressions_support.feature
|
64
|
+
- features/rspec/json_expectations/rspec_matchers_support.feature
|
64
65
|
- features/rspec/json_expectations/simple_hash_match.feature
|
65
66
|
- features/step_definitions/steps.rb
|
66
67
|
- features/support/env.rb
|
@@ -104,6 +105,8 @@ test_files:
|
|
104
105
|
- features/rspec/json_expectations/negation_matching.feature
|
105
106
|
- features/rspec/json_expectations/nested_json_support.feature
|
106
107
|
- features/rspec/json_expectations/regular_expressions_support.feature
|
108
|
+
- features/rspec/json_expectations/rspec_matchers_support.feature
|
107
109
|
- features/rspec/json_expectations/simple_hash_match.feature
|
108
110
|
- features/step_definitions/steps.rb
|
109
111
|
- features/support/env.rb
|
112
|
+
has_rdoc:
|