rspec-expectations 3.0.0.beta2 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -2
- data/.yardopts +0 -1
- data/Changelog.md +115 -35
- data/README.md +2 -2
- data/lib/rspec/expectations.rb +13 -8
- data/lib/rspec/{matchers → expectations}/configuration.rb +38 -13
- data/lib/rspec/expectations/expectation_target.rb +72 -8
- data/lib/rspec/expectations/fail_with.rb +10 -52
- data/lib/rspec/expectations/handler.rb +9 -11
- data/lib/rspec/expectations/syntax.rb +37 -35
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +60 -9
- data/lib/rspec/matchers/aliased_matcher.rb +6 -0
- data/lib/rspec/matchers/built_in.rb +9 -1
- data/lib/rspec/matchers/built_in/all.rb +78 -0
- data/lib/rspec/matchers/built_in/base_matcher.rb +39 -1
- data/lib/rspec/matchers/built_in/be.rb +117 -42
- data/lib/rspec/matchers/built_in/be_between.rb +22 -0
- data/lib/rspec/matchers/built_in/be_instance_of.rb +11 -3
- data/lib/rspec/matchers/built_in/be_kind_of.rb +5 -0
- data/lib/rspec/matchers/built_in/be_within.rb +26 -6
- data/lib/rspec/matchers/built_in/change.rb +89 -13
- data/lib/rspec/matchers/built_in/compound.rb +19 -3
- data/lib/rspec/matchers/built_in/contain_exactly.rb +17 -6
- data/lib/rspec/matchers/built_in/cover.rb +3 -0
- data/lib/rspec/matchers/built_in/eq.rb +20 -5
- data/lib/rspec/matchers/built_in/eql.rb +15 -3
- data/lib/rspec/matchers/built_in/equal.rb +23 -6
- data/lib/rspec/matchers/built_in/exist.rb +74 -10
- data/lib/rspec/matchers/built_in/has.rb +58 -3
- data/lib/rspec/matchers/built_in/include.rb +16 -1
- data/lib/rspec/matchers/built_in/match.rb +14 -4
- data/lib/rspec/matchers/built_in/operators.rb +16 -0
- data/lib/rspec/matchers/built_in/output.rb +47 -5
- data/lib/rspec/matchers/built_in/raise_error.rb +40 -23
- data/lib/rspec/matchers/built_in/respond_to.rb +37 -16
- data/lib/rspec/matchers/built_in/satisfy.rb +15 -0
- data/lib/rspec/matchers/built_in/start_and_end_with.rb +29 -14
- data/lib/rspec/matchers/built_in/throw_symbol.rb +32 -3
- data/lib/rspec/matchers/built_in/yield.rb +148 -44
- data/lib/rspec/matchers/composable.rb +48 -7
- data/lib/rspec/matchers/dsl.rb +45 -17
- data/lib/rspec/matchers/generated_descriptions.rb +7 -0
- data/lib/rspec/matchers/matcher_delegator.rb +6 -2
- data/lib/rspec/matchers/pretty.rb +15 -19
- metadata +33 -236
- metadata.gz.sig +0 -0
- data/features/README.md +0 -48
- data/features/Upgrade.md +0 -53
- data/features/built_in_matchers/README.md +0 -96
- data/features/built_in_matchers/be.feature +0 -175
- data/features/built_in_matchers/be_within.feature +0 -48
- data/features/built_in_matchers/comparisons.feature +0 -97
- data/features/built_in_matchers/contain_exactly.feature +0 -46
- data/features/built_in_matchers/cover.feature +0 -47
- data/features/built_in_matchers/end_with.feature +0 -48
- data/features/built_in_matchers/equality.feature +0 -136
- data/features/built_in_matchers/exist.feature +0 -45
- data/features/built_in_matchers/expect_change.feature +0 -59
- data/features/built_in_matchers/expect_error.feature +0 -144
- data/features/built_in_matchers/include.feature +0 -126
- data/features/built_in_matchers/match.feature +0 -51
- data/features/built_in_matchers/output.feature +0 -70
- data/features/built_in_matchers/predicates.feature +0 -161
- data/features/built_in_matchers/respond_to.feature +0 -84
- data/features/built_in_matchers/satisfy.feature +0 -33
- data/features/built_in_matchers/start_with.feature +0 -48
- data/features/built_in_matchers/throw_symbol.feature +0 -91
- data/features/built_in_matchers/types.feature +0 -116
- data/features/built_in_matchers/yield.feature +0 -161
- data/features/composing_matchers.feature +0 -250
- data/features/compound_expectations.feature +0 -45
- data/features/custom_matchers/access_running_example.feature +0 -53
- data/features/custom_matchers/define_diffable_matcher.feature +0 -27
- data/features/custom_matchers/define_matcher.feature +0 -340
- data/features/custom_matchers/define_matcher_outside_rspec.feature +0 -34
- data/features/custom_matchers/define_matcher_with_fluent_interface.feature +0 -24
- data/features/customized_message.feature +0 -39
- data/features/diffing.feature +0 -85
- data/features/implicit_docstrings.feature +0 -52
- data/features/step_definitions/additional_cli_steps.rb +0 -22
- data/features/support/env.rb +0 -21
- data/features/support/rubinius.rb +0 -6
- data/features/syntax_configuration.feature +0 -71
- data/features/test_frameworks/minitest.feature +0 -44
- data/lib/rspec-expectations.rb +0 -1
- data/lib/rspec/expectations/diff_presenter.rb +0 -141
- data/lib/rspec/expectations/differ.rb +0 -44
- data/lib/rspec/expectations/encoded_string.rb +0 -56
- data/spec/rspec/expectations/diff_presenter_spec.rb +0 -249
- data/spec/rspec/expectations/encoded_string_spec.rb +0 -74
- data/spec/rspec/expectations/expectation_target_spec.rb +0 -82
- data/spec/rspec/expectations/extensions/kernel_spec.rb +0 -67
- data/spec/rspec/expectations/fail_with_spec.rb +0 -114
- data/spec/rspec/expectations/handler_spec.rb +0 -205
- data/spec/rspec/expectations/minitest_integration_spec.rb +0 -27
- data/spec/rspec/expectations/syntax_spec.rb +0 -89
- data/spec/rspec/expectations_spec.rb +0 -12
- data/spec/rspec/matchers/aliased_matcher_spec.rb +0 -48
- data/spec/rspec/matchers/aliases_spec.rb +0 -449
- data/spec/rspec/matchers/built_in/base_matcher_spec.rb +0 -83
- data/spec/rspec/matchers/built_in/be_between_spec.rb +0 -159
- data/spec/rspec/matchers/built_in/be_instance_of_spec.rb +0 -63
- data/spec/rspec/matchers/built_in/be_kind_of_spec.rb +0 -41
- data/spec/rspec/matchers/built_in/be_spec.rb +0 -592
- data/spec/rspec/matchers/built_in/be_within_spec.rb +0 -141
- data/spec/rspec/matchers/built_in/change_spec.rb +0 -808
- data/spec/rspec/matchers/built_in/compound_spec.rb +0 -292
- data/spec/rspec/matchers/built_in/contain_exactly_spec.rb +0 -441
- data/spec/rspec/matchers/built_in/cover_spec.rb +0 -69
- data/spec/rspec/matchers/built_in/eq_spec.rb +0 -156
- data/spec/rspec/matchers/built_in/eql_spec.rb +0 -41
- data/spec/rspec/matchers/built_in/equal_spec.rb +0 -106
- data/spec/rspec/matchers/built_in/exist_spec.rb +0 -124
- data/spec/rspec/matchers/built_in/has_spec.rb +0 -161
- data/spec/rspec/matchers/built_in/include_spec.rb +0 -540
- data/spec/rspec/matchers/built_in/match_spec.rb +0 -102
- data/spec/rspec/matchers/built_in/operators_spec.rb +0 -252
- data/spec/rspec/matchers/built_in/output_spec.rb +0 -165
- data/spec/rspec/matchers/built_in/raise_error_spec.rb +0 -461
- data/spec/rspec/matchers/built_in/respond_to_spec.rb +0 -292
- data/spec/rspec/matchers/built_in/satisfy_spec.rb +0 -44
- data/spec/rspec/matchers/built_in/start_and_end_with_spec.rb +0 -253
- data/spec/rspec/matchers/built_in/throw_symbol_spec.rb +0 -135
- data/spec/rspec/matchers/built_in/yield_spec.rb +0 -627
- data/spec/rspec/matchers/configuration_spec.rb +0 -213
- data/spec/rspec/matchers/description_generation_spec.rb +0 -191
- data/spec/rspec/matchers/dsl_spec.rb +0 -895
- data/spec/rspec/matchers/legacy_spec.rb +0 -101
- data/spec/rspec/matchers_spec.rb +0 -74
- data/spec/spec_helper.rb +0 -85
- data/spec/support/matchers.rb +0 -22
- data/spec/support/shared_examples.rb +0 -35
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if (1..2).respond_to?(:cover?)
|
4
|
-
describe "expect(...).to cover(expected)" do
|
5
|
-
it_behaves_like "an RSpec matcher", :valid_value => (1..10), :invalid_value => (20..30) do
|
6
|
-
let(:matcher) { cover(5) }
|
7
|
-
end
|
8
|
-
|
9
|
-
context "for a range target" do
|
10
|
-
it "passes if target covers expected" do
|
11
|
-
expect((1..10)).to cover(5)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "fails if target does not cover expected" do
|
15
|
-
expect {
|
16
|
-
expect((1..10)).to cover(11)
|
17
|
-
}.to fail_with("expected 1..10 to cover 11")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "expect(...).to cover(with, multiple, args)" do
|
23
|
-
context "for a range target" do
|
24
|
-
it "passes if target covers all items" do
|
25
|
-
expect((1..10)).to cover(4, 6)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "fails if target does not cover any one of the items" do
|
29
|
-
expect {
|
30
|
-
expect((1..10)).to cover(4, 6, 11)
|
31
|
-
}.to fail_with("expected 1..10 to cover 4, 6, and 11")
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "expect(...).not_to cover(expected)" do
|
37
|
-
context "for a range target" do
|
38
|
-
it "passes if target does not cover expected" do
|
39
|
-
expect((1..10)).not_to cover(11)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "fails if target covers expected" do
|
43
|
-
expect {
|
44
|
-
expect((1..10)).not_to cover(5)
|
45
|
-
}.to fail_with("expected 1..10 not to cover 5")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe "expect(...).not_to cover(with, multiple, args)" do
|
51
|
-
context "for a range target" do
|
52
|
-
it "passes if the target does not cover any of the expected" do
|
53
|
-
expect((1..10)).not_to cover(11, 12, 13)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "fails if the target covers all of the expected" do
|
57
|
-
expect {
|
58
|
-
expect((1..10)).not_to cover(4, 6)
|
59
|
-
}.to fail_with("expected 1..10 not to cover 4 and 6")
|
60
|
-
end
|
61
|
-
|
62
|
-
it "fails if the target covers some (but not all) of the expected" do
|
63
|
-
expect {
|
64
|
-
expect((1..10)).not_to cover(5, 11)
|
65
|
-
}.to fail_with("expected 1..10 not to cover 5 and 11")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,156 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'date'
|
3
|
-
require 'complex'
|
4
|
-
|
5
|
-
module RSpec
|
6
|
-
module Matchers
|
7
|
-
describe "eq" do
|
8
|
-
it_behaves_like "an RSpec matcher", :valid_value => 1, :invalid_value => 2 do
|
9
|
-
let(:matcher) { eq(1) }
|
10
|
-
end
|
11
|
-
|
12
|
-
it "is diffable" do
|
13
|
-
expect(eq(1)).to be_diffable
|
14
|
-
end
|
15
|
-
|
16
|
-
it "matches when actual == expected" do
|
17
|
-
expect(1).to eq(1)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "does not match when actual != expected" do
|
21
|
-
expect(1).not_to eq(2)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "compares by sending == to actual (not expected)" do
|
25
|
-
called = false
|
26
|
-
actual = Class.new do
|
27
|
-
define_method :== do |other|
|
28
|
-
called = true
|
29
|
-
end
|
30
|
-
end.new
|
31
|
-
|
32
|
-
expect(actual).to eq :anything # to trigger the matches? method
|
33
|
-
expect(called).to be_truthy
|
34
|
-
end
|
35
|
-
|
36
|
-
it "describes itself" do
|
37
|
-
matcher = eq(1)
|
38
|
-
matcher.matches?(1)
|
39
|
-
expect(matcher.description).to eq "eq 1"
|
40
|
-
end
|
41
|
-
|
42
|
-
it "provides message, expected and actual on #failure_message" do
|
43
|
-
matcher = eq("1")
|
44
|
-
matcher.matches?(1)
|
45
|
-
expect(matcher.failure_message).to eq "\nexpected: \"1\"\n got: 1\n\n(compared using ==)\n"
|
46
|
-
end
|
47
|
-
|
48
|
-
it "provides message, expected and actual on #negative_failure_message" do
|
49
|
-
matcher = eq(1)
|
50
|
-
matcher.matches?(1)
|
51
|
-
expect(matcher.failure_message_when_negated).to eq "\nexpected: value != 1\n got: 1\n\n(compared using ==)\n"
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'fails properly when the actual is an array of multiline strings' do
|
55
|
-
expect {
|
56
|
-
expect(["a\nb", "c\nd"]).to eq([])
|
57
|
-
}.to fail_matching("expected: []")
|
58
|
-
end
|
59
|
-
|
60
|
-
describe '#description' do
|
61
|
-
[
|
62
|
-
[nil, 'eq nil'],
|
63
|
-
[true, 'eq true'],
|
64
|
-
[false, 'eq false'],
|
65
|
-
[:symbol, 'eq :symbol'],
|
66
|
-
[1, 'eq 1'],
|
67
|
-
[1.2, 'eq 1.2'],
|
68
|
-
[Complex(1, 2), "eq #{Complex(1, 2).inspect}"],
|
69
|
-
['foo', 'eq "foo"'],
|
70
|
-
[/regex/, 'eq /regex/'],
|
71
|
-
[['foo'], 'eq ["foo"]'],
|
72
|
-
[{:foo => :bar}, 'eq {:foo=>:bar}'],
|
73
|
-
[Class, 'eq Class'],
|
74
|
-
[RSpec, 'eq RSpec'],
|
75
|
-
[Date.new(2014, 1, 1), "eq #{Date.new(2014, 1, 1).inspect}"],
|
76
|
-
[Time.utc(2014, 1, 1), "eq #{Time.utc(2014, 1, 1).inspect}"],
|
77
|
-
].each do |expected, expected_description|
|
78
|
-
context "with #{expected.inspect}" do
|
79
|
-
it "is \"#{expected_description}\"" do
|
80
|
-
expect(eq(expected).description).to eq expected_description
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context 'with object' do
|
86
|
-
it 'matches with "^eq #<Object:0x[0-9a-f]*>$"' do
|
87
|
-
expect(eq(Object.new).description).to match(/^eq #<Object:0x[0-9a-f]*>$/)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "Time Equality" do
|
93
|
-
RSpec::Matchers.define :a_string_with_differing_output do
|
94
|
-
match do |string|
|
95
|
-
time_strings = /expected: (.+)\n.*got: (.+)$/.match(string).captures
|
96
|
-
time_strings.uniq.count == 2
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
RSpec::Matchers.define :a_string_with_identical_output do
|
101
|
-
match do |string|
|
102
|
-
time_strings = /expected: value != (.+)\n.*got: (.+)$/.match(string).captures
|
103
|
-
time_strings.uniq.count == 1
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context 'with Time objects' do
|
108
|
-
let(:time1) { Time.utc(1969, 12, 31, 19, 01, 40, 101) }
|
109
|
-
let(:time2) { Time.utc(1969, 12, 31, 19, 01, 40, 102) }
|
110
|
-
|
111
|
-
it 'produces different output for Times differing by milliseconds' do
|
112
|
-
expect {
|
113
|
-
expect(time1).to eq(time2)
|
114
|
-
}.to fail_with(a_string_with_differing_output)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
context 'with DateTime objects' do
|
119
|
-
let(:date1) { DateTime.new(2000, 1, 1, 1, 1, Rational(1, 10)) }
|
120
|
-
let(:date2) { DateTime.new(2000, 1, 1, 1, 1, Rational(2, 10)) }
|
121
|
-
|
122
|
-
it 'produces different output for DateTimes differing by milliseconds' do
|
123
|
-
expect {
|
124
|
-
expect(date1).to eq(date2)
|
125
|
-
}.to fail_with(a_string_with_differing_output)
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'does not not assume DateTime is defined since you need to require `date` to make it available' do
|
129
|
-
hide_const('DateTime')
|
130
|
-
expect {
|
131
|
-
expect(5).to eq(4)
|
132
|
-
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
133
|
-
end
|
134
|
-
|
135
|
-
it 'fails with identical output when the DateTimes are exactly the same' do
|
136
|
-
expect {
|
137
|
-
expect(date1).to_not eq(date1)
|
138
|
-
}.to fail_with(a_string_with_identical_output)
|
139
|
-
end
|
140
|
-
|
141
|
-
context 'when ActiveSupport is loaded' do
|
142
|
-
it "uses a custom format to ensure the output is different when DateTimes differ" do
|
143
|
-
stub_const("ActiveSupport", Module.new)
|
144
|
-
allow(date1).to receive(:inspect).and_return("Timestamp")
|
145
|
-
allow(date2).to receive(:inspect).and_return("Timestamp")
|
146
|
-
|
147
|
-
expect {
|
148
|
-
expect(date1).to eq(date2)
|
149
|
-
}.to fail_with(a_string_with_differing_output)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module RSpec
|
4
|
-
module Matchers
|
5
|
-
describe "eql" do
|
6
|
-
it_behaves_like "an RSpec matcher", :valid_value => 1, :invalid_value => 2 do
|
7
|
-
let(:matcher) { eql(1) }
|
8
|
-
end
|
9
|
-
|
10
|
-
it "is diffable" do
|
11
|
-
expect(eql(1)).to be_diffable
|
12
|
-
end
|
13
|
-
|
14
|
-
it "matches when actual.eql?(expected)" do
|
15
|
-
expect(1).to eql(1)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "does not match when !actual.eql?(expected)" do
|
19
|
-
expect(1).not_to eql(2)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "describes itself" do
|
23
|
-
matcher = eql(1)
|
24
|
-
matcher.matches?(1)
|
25
|
-
expect(matcher.description).to eq "eql 1"
|
26
|
-
end
|
27
|
-
|
28
|
-
it "provides message, expected and actual on #failure_message" do
|
29
|
-
matcher = eql("1")
|
30
|
-
matcher.matches?(1)
|
31
|
-
expect(matcher.failure_message).to eq "\nexpected: \"1\"\n got: 1\n\n(compared using eql?)\n"
|
32
|
-
end
|
33
|
-
|
34
|
-
it "provides message, expected and actual on #negative_failure_message" do
|
35
|
-
matcher = eql(1)
|
36
|
-
matcher.matches?(1)
|
37
|
-
expect(matcher.failure_message_when_negated).to eq "\nexpected: value != 1\n got: 1\n\n(compared using eql?)\n"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,106 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module RSpec
|
3
|
-
module Matchers
|
4
|
-
describe "equal" do
|
5
|
-
it_behaves_like "an RSpec matcher", :valid_value => :a, :invalid_value => :b do
|
6
|
-
let(:matcher) { equal(:a) }
|
7
|
-
end
|
8
|
-
|
9
|
-
def inspect_object(o)
|
10
|
-
"#<#{o.class}:#{o.object_id}> => #{o.inspect}"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "matches when actual.equal?(expected)" do
|
14
|
-
expect(1).to equal(1)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "does not match when !actual.equal?(expected)" do
|
18
|
-
expect("1").not_to equal("1")
|
19
|
-
end
|
20
|
-
|
21
|
-
it "describes itself" do
|
22
|
-
matcher = equal(1)
|
23
|
-
matcher.matches?(1)
|
24
|
-
expect(matcher.description).to eq "equal 1"
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when the expected object is falsey in conditinal semantics" do
|
28
|
-
it "describes itself with the expected object" do
|
29
|
-
matcher = equal(nil)
|
30
|
-
matcher.matches?(nil)
|
31
|
-
expect(matcher.description).to eq "equal nil"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when the expected object's #equal? always returns true" do
|
36
|
-
let(:strange_string) do
|
37
|
-
string = "foo"
|
38
|
-
|
39
|
-
def string.equal?(other)
|
40
|
-
true
|
41
|
-
end
|
42
|
-
|
43
|
-
string
|
44
|
-
end
|
45
|
-
|
46
|
-
it "describes itself with the expected object" do
|
47
|
-
matcher = equal(strange_string)
|
48
|
-
matcher.matches?(strange_string)
|
49
|
-
expect(matcher.description).to eq 'equal "foo"'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
it "prints a special message for `false`" do
|
54
|
-
expected, actual = false, "1"
|
55
|
-
expect {
|
56
|
-
expect(actual).to equal(expected)
|
57
|
-
}.to fail_with "\nexpected false\n got #{inspect_object(actual)}\n"
|
58
|
-
end
|
59
|
-
|
60
|
-
it "prints a special message for `true`" do
|
61
|
-
expected, actual = true, "1"
|
62
|
-
expect {
|
63
|
-
expect(actual).to equal(expected)
|
64
|
-
}.to fail_with "\nexpected true\n got #{inspect_object(actual)}\n"
|
65
|
-
end
|
66
|
-
|
67
|
-
it "prints a special message for `nil`" do
|
68
|
-
expected, actual = nil, "1"
|
69
|
-
expect {
|
70
|
-
expect(actual).to equal(expected)
|
71
|
-
}.to fail_with "\nexpected nil\n got #{inspect_object(actual)}\n"
|
72
|
-
end
|
73
|
-
|
74
|
-
it "suggests the `eq` matcher on failure" do
|
75
|
-
expected, actual = "1", "1"
|
76
|
-
expect {
|
77
|
-
expect(actual).to equal(expected)
|
78
|
-
}.to fail_with <<-MESSAGE
|
79
|
-
|
80
|
-
expected #{inspect_object(expected)}
|
81
|
-
got #{inspect_object(actual)}
|
82
|
-
|
83
|
-
Compared using equal?, which compares object identity,
|
84
|
-
but expected and actual are not the same object. Use
|
85
|
-
`expect(actual).to eq(expected)` if you don't care about
|
86
|
-
object identity in this example.
|
87
|
-
|
88
|
-
MESSAGE
|
89
|
-
end
|
90
|
-
|
91
|
-
it "provides message on #negative_failure_message" do
|
92
|
-
expected = actual = "1"
|
93
|
-
matcher = equal(expected)
|
94
|
-
matcher.matches?(actual)
|
95
|
-
expect(matcher.failure_message_when_negated).to eq <<-MESSAGE
|
96
|
-
|
97
|
-
expected not #{inspect_object(expected)}
|
98
|
-
got #{inspect_object(actual)}
|
99
|
-
|
100
|
-
Compared using equal?, which compares object identity.
|
101
|
-
|
102
|
-
MESSAGE
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
@@ -1,124 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ostruct'
|
3
|
-
|
4
|
-
describe "exist matcher" do
|
5
|
-
it_behaves_like "an RSpec matcher", :valid_value => OpenStruct.new(:exist? => true),
|
6
|
-
:invalid_value => OpenStruct.new(:exist? => false) do
|
7
|
-
let(:matcher) { exist }
|
8
|
-
end
|
9
|
-
|
10
|
-
context "when the object does not respond to #exist? or #exists?" do
|
11
|
-
subject { double }
|
12
|
-
|
13
|
-
[:to, :not_to].each do |expect_method|
|
14
|
-
describe "expect(...).#{expect_method} exist" do
|
15
|
-
it "raises an error" do
|
16
|
-
expect {
|
17
|
-
expect(subject).send(expect_method, exist)
|
18
|
-
}.to raise_error(NoMethodError)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
[:exist?, :exists?].each do |predicate|
|
25
|
-
context "when the object responds to ##{predicate}" do
|
26
|
-
describe "expect(...).to exist" do
|
27
|
-
it "passes if #{predicate}" do
|
28
|
-
expect(double(predicate => true)).to exist
|
29
|
-
end
|
30
|
-
|
31
|
-
it "fails if not #{predicate}" do
|
32
|
-
expect {
|
33
|
-
expect(double(predicate => false)).to exist
|
34
|
-
}.to fail_with(/expected .* to exist/)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'works when the object overrides `send`' do
|
38
|
-
klass = Struct.new(:message) do
|
39
|
-
def send
|
40
|
-
:message_sent
|
41
|
-
end
|
42
|
-
|
43
|
-
define_method predicate do
|
44
|
-
true
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
expect(klass.new("msg")).to exist
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "expect(...).not_to exist" do
|
53
|
-
it "passes if not #{predicate}" do
|
54
|
-
expect(double(predicate => false)).not_to exist
|
55
|
-
end
|
56
|
-
|
57
|
-
it "fails if #{predicate}" do
|
58
|
-
expect {
|
59
|
-
expect(double(predicate => true)).not_to exist
|
60
|
-
}.to fail_with(/expected .* not to exist/)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context "when the object responds to #exist? and #exists?" do
|
67
|
-
context "when they both return falsey values" do
|
68
|
-
subject { double(:exist? => false, :exists? => nil) }
|
69
|
-
|
70
|
-
describe "expect(...).not_to exist" do
|
71
|
-
it "passes" do
|
72
|
-
expect(subject).not_to exist
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe "expect(...).to exist" do
|
77
|
-
it "fails" do
|
78
|
-
expect {
|
79
|
-
expect(subject).to exist
|
80
|
-
}.to fail_with(/expected .* to exist/)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context "when they both return truthy values" do
|
86
|
-
subject { double(:exist? => true, :exists? => "something true") }
|
87
|
-
|
88
|
-
describe "expect(...).not_to exist" do
|
89
|
-
it "fails" do
|
90
|
-
expect {
|
91
|
-
expect(subject).not_to exist
|
92
|
-
}.to fail_with(/expected .* not to exist/)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "expect(...).to exist" do
|
97
|
-
it "passes" do
|
98
|
-
expect(subject).to exist
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
context "when they return values with different truthiness" do
|
104
|
-
subject { double(:exist? => true, :exists? => false) }
|
105
|
-
|
106
|
-
[:to, :not_to].each do |expect_method|
|
107
|
-
describe "expect(...).#{expect_method} exist" do
|
108
|
-
it "raises an error" do
|
109
|
-
expect {
|
110
|
-
expect(subject).send(expect_method, exist)
|
111
|
-
}.to raise_error(/#exist\? and #exists\? returned different values/)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'passes any provided arguments to the call to #exist?' do
|
119
|
-
object = double
|
120
|
-
expect(object).to receive(:exist?).with(:foo, :bar) { true }
|
121
|
-
|
122
|
-
expect(object).to exist(:foo, :bar)
|
123
|
-
end
|
124
|
-
end
|