rspec-rails 2.99.0.beta1 → 2.99.0.beta2

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.
Files changed (58) hide show
  1. checksums.yaml +8 -8
  2. data/Changelog.md +18 -0
  3. data/features/controller_specs/capybara.feature +44 -0
  4. data/features/controller_specs/render_views.feature +1 -1
  5. data/lib/autotest/rails_rspec2.rb +1 -0
  6. data/lib/generators/rspec/install/templates/spec/spec_helper.rb.tt +0 -1
  7. data/lib/generators/rspec/integration/integration_generator.rb +3 -2
  8. data/lib/generators/rspec/scaffold/scaffold_generator.rb +3 -2
  9. data/lib/rspec/rails/adapters.rb +12 -5
  10. data/lib/rspec/rails/example/controller_example_group.rb +2 -1
  11. data/lib/rspec/rails/example/view_example_group.rb +3 -0
  12. data/lib/rspec/rails/matchers/have_extension.rb +1 -0
  13. data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
  14. data/lib/rspec/rails/matchers/routing_matchers.rb +4 -0
  15. data/lib/rspec/rails/mocks.rb +22 -0
  16. data/lib/rspec/rails/vendor/capybara.rb +35 -4
  17. data/lib/rspec/rails/version.rb +1 -1
  18. data/spec/autotest/rails_rspec2_spec.rb +5 -5
  19. data/spec/generators/rspec/controller/controller_generator_spec.rb +16 -16
  20. data/spec/generators/rspec/helper/helper_generator_spec.rb +4 -4
  21. data/spec/generators/rspec/install/install_generator_spec.rb +4 -4
  22. data/spec/generators/rspec/integration/integration_generator_spec.rb +18 -5
  23. data/spec/generators/rspec/mailer/mailer_generator_spec.rb +11 -11
  24. data/spec/generators/rspec/model/model_generator_spec.rb +7 -7
  25. data/spec/generators/rspec/observer/observer_generator_spec.rb +3 -3
  26. data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +46 -34
  27. data/spec/generators/rspec/view/view_generator_spec.rb +6 -6
  28. data/spec/rspec/rails/assertion_adapter_spec.rb +3 -3
  29. data/spec/rspec/rails/configuration_spec.rb +2 -2
  30. data/spec/rspec/rails/deprecations_spec.rb +1 -1
  31. data/spec/rspec/rails/example/controller_example_group_spec.rb +47 -21
  32. data/spec/rspec/rails/example/feature_example_group_spec.rb +2 -2
  33. data/spec/rspec/rails/example/helper_example_group_spec.rb +12 -12
  34. data/spec/rspec/rails/example/mailer_example_group_spec.rb +3 -3
  35. data/spec/rspec/rails/example/model_example_group_spec.rb +3 -3
  36. data/spec/rspec/rails/example/request_example_group_spec.rb +5 -5
  37. data/spec/rspec/rails/example/routing_example_group_spec.rb +5 -5
  38. data/spec/rspec/rails/example/view_example_group_spec.rb +44 -29
  39. data/spec/rspec/rails/extensions/active_model/errors_on_spec.rb +3 -3
  40. data/spec/rspec/rails/fixture_support_spec.rb +3 -3
  41. data/spec/rspec/rails/matchers/be_a_new_spec.rb +17 -17
  42. data/spec/rspec/rails/matchers/be_new_record_spec.rb +2 -2
  43. data/spec/rspec/rails/matchers/be_routable_spec.rb +8 -8
  44. data/spec/rspec/rails/matchers/be_valid_spec.rb +3 -4
  45. data/spec/rspec/rails/matchers/errors_on_spec.rb +12 -12
  46. data/spec/rspec/rails/matchers/has_spec.rb +1 -1
  47. data/spec/rspec/rails/matchers/have_rendered_spec.rb +3 -3
  48. data/spec/rspec/rails/matchers/redirect_to_spec.rb +7 -6
  49. data/spec/rspec/rails/matchers/relation_match_array_spec.rb +5 -5
  50. data/spec/rspec/rails/matchers/route_to_spec.rb +21 -21
  51. data/spec/rspec/rails/minitest_lifecycle_adapter_spec.rb +9 -0
  52. data/spec/rspec/rails/mocks/mock_model_spec.rb +80 -57
  53. data/spec/rspec/rails/mocks/stub_model_spec.rb +23 -23
  54. data/spec/rspec/rails/setup_and_teardown_adapter_spec.rb +4 -4
  55. data/spec/rspec/rails/view_rendering_spec.rb +14 -14
  56. data/spec/spec_helper.rb +1 -0
  57. data/spec/support/helpers.rb +15 -1
  58. metadata +29 -13
@@ -7,7 +7,7 @@ describe "be_new_record" do
7
7
  let(:record) { double('record', :persisted? => false) }
8
8
 
9
9
  it "passes" do
10
- record.should be_new_record
10
+ expect(record).to be_new_record
11
11
  end
12
12
 
13
13
  it "fails with custom failure message" do
@@ -21,7 +21,7 @@ describe "be_new_record" do
21
21
  let(:record) { double('record', :persisted? => true) }
22
22
 
23
23
  it "fails" do
24
- record.should_not be_new_record
24
+ expect(record).not_to be_new_record
25
25
  end
26
26
 
27
27
  it "fails with custom failure message" do
@@ -8,16 +8,16 @@ describe "be_routable" do
8
8
 
9
9
  context "with should" do
10
10
  it "passes if routes recognize the path" do
11
- routes.stub(:recognize_path) { {} }
11
+ allow(routes).to receive(:recognize_path) { {} }
12
12
  expect do
13
- {:get => "/a/path"}.should be_routable
13
+ expect({:get => "/a/path"}).to be_routable
14
14
  end.to_not raise_error
15
15
  end
16
16
 
17
17
  it "fails if routes do not recognize the path" do
18
- routes.stub(:recognize_path) { raise ActionController::RoutingError.new('ignore') }
18
+ allow(routes).to receive(:recognize_path) { raise ActionController::RoutingError.new('ignore') }
19
19
  expect do
20
- {:get => "/a/path"}.should be_routable
20
+ expect({:get => "/a/path"}).to be_routable
21
21
  end.to raise_error(/expected \{:get=>"\/a\/path"\} to be routable/)
22
22
  end
23
23
  end
@@ -25,16 +25,16 @@ describe "be_routable" do
25
25
  context "with should_not" do
26
26
 
27
27
  it "passes if routes do not recognize the path" do
28
- routes.stub(:recognize_path) { raise ActionController::RoutingError.new('ignore') }
28
+ allow(routes).to receive(:recognize_path) { raise ActionController::RoutingError.new('ignore') }
29
29
  expect do
30
- {:get => "/a/path"}.should_not be_routable
30
+ expect({:get => "/a/path"}).not_to be_routable
31
31
  end.to_not raise_error
32
32
  end
33
33
 
34
34
  it "fails if routes recognize the path" do
35
- routes.stub(:recognize_path) { {:controller => "foo"} }
35
+ allow(routes).to receive(:recognize_path) { {:controller => "foo"} }
36
36
  expect do
37
- {:get => "/a/path"}.should_not be_routable
37
+ expect({:get => "/a/path"}).not_to be_routable
38
38
  end.to raise_error(/expected \{:get=>"\/a\/path"\} not to be routable, but it routes to \{:controller=>"foo"\}/)
39
39
  end
40
40
  end
@@ -1,5 +1,4 @@
1
1
  require "spec_helper"
2
- require 'active_support/all'
3
2
  require 'rspec/rails/matchers/be_valid'
4
3
 
5
4
  describe "be_valid matcher" do
@@ -20,7 +19,7 @@ describe "be_valid matcher" do
20
19
  end
21
20
 
22
21
  it "includes a failure message for the negative case" do
23
- post.stub(:valid?) { true }
22
+ allow(post).to receive(:valid?) { true }
24
23
  expect {
25
24
  expect(post).not_to be_valid
26
25
  }.to raise_exception(/expected .* not to be valid/)
@@ -33,12 +32,12 @@ describe "be_valid matcher" do
33
32
  end
34
33
 
35
34
  it "includes the validation context if provided" do
36
- post.should_receive(:valid?).with(:create) { true }
35
+ expect(post).to receive(:valid?).with(:create) { true }
37
36
  expect(post).to be_valid(:create)
38
37
  end
39
38
 
40
39
  it "does not include the validation context if not provided" do
41
- post.should_receive(:valid?).with(no_args) { true }
40
+ expect(post).to receive(:valid?).with(no_args) { true }
42
41
  expect(post).to be_valid
43
42
  end
44
43
  end
@@ -2,37 +2,37 @@ require "spec_helper"
2
2
 
3
3
  describe "error_on" do
4
4
  it "provides a description including the name of what the error is on" do
5
- have(1).error_on(:whatever).description.should == "have 1 error on :whatever"
5
+ expect(have(1).error_on(:whatever).description).to eq("have 1 error on :whatever")
6
6
  end
7
7
 
8
8
  it "provides a failure message including the number actually given" do
9
- lambda {
10
- [].should have(1).error_on(:whatever)
11
- }.should raise_error("expected 1 error on :whatever, got 0")
9
+ expect {
10
+ expect([]).to have(1).error_on(:whatever)
11
+ }.to raise_error("expected 1 error on :whatever, got 0")
12
12
  end
13
13
  end
14
14
 
15
15
  describe "errors_on" do
16
16
  it "provides a description including the name of what the error is on" do
17
- have(2).errors_on(:whatever).description.should == "have 2 errors on :whatever"
17
+ expect(have(2).errors_on(:whatever).description).to eq("have 2 errors on :whatever")
18
18
  end
19
19
 
20
20
  it "provides a failure message including the number actually given" do
21
- lambda {
22
- [1].should have(3).errors_on(:whatever)
23
- }.should raise_error("expected 3 errors on :whatever, got 1")
21
+ expect {
22
+ expect([1]).to have(3).errors_on(:whatever)
23
+ }.to raise_error("expected 3 errors on :whatever, got 1")
24
24
  end
25
25
  end
26
26
 
27
27
  describe "have something other than error_on or errors_on" do
28
28
  it "has a standard rspec failure message" do
29
- lambda {
30
- [1,2,3].should have(2).elements
31
- }.should raise_error("expected 2 elements, got 3")
29
+ expect {
30
+ expect([1,2,3]).to have(2).elements
31
+ }.to raise_error("expected 2 elements, got 3")
32
32
  end
33
33
 
34
34
  it "has a standard rspec description" do
35
- have(2).elements.description.should == "have 2 elements"
35
+ expect(have(2).elements.description).to eq("have 2 elements")
36
36
  end
37
37
  end
38
38
 
@@ -24,6 +24,6 @@ end
24
24
  describe "should have_xxx" do
25
25
  it "works with ActiveRecord::Associations::CollectionProxy" do
26
26
  owner = CollectionOwner.new
27
- owner.associated_items.should have_some_quality
27
+ expect(owner.associated_items).to have_some_quality
28
28
  end
29
29
  end
@@ -7,21 +7,21 @@ require "spec_helper"
7
7
 
8
8
  context "given a hash" do
9
9
  it "delegates to assert_template" do
10
- self.should_receive(:assert_template).with({:this => "hash"}, "this message")
10
+ expect(self).to receive(:assert_template).with({:this => "hash"}, "this message")
11
11
  expect("response").to send(template_expectation, {:this => "hash"}, "this message")
12
12
  end
13
13
  end
14
14
 
15
15
  context "given a string" do
16
16
  it "delegates to assert_template" do
17
- self.should_receive(:assert_template).with("this string", "this message")
17
+ expect(self).to receive(:assert_template).with("this string", "this message")
18
18
  expect("response").to send(template_expectation, "this string", "this message")
19
19
  end
20
20
  end
21
21
 
22
22
  context "given a symbol" do
23
23
  it "converts to_s and delegates to assert_template" do
24
- self.should_receive(:assert_template).with("template_name", "this message")
24
+ expect(self).to receive(:assert_template).with("template_name", "this message")
25
25
  expect("response").to send(template_expectation, :template_name, "this message")
26
26
  end
27
27
  end
@@ -1,4 +1,5 @@
1
1
  require "spec_helper"
2
+ require "active_support"
2
3
  require "active_support/test_case"
3
4
 
4
5
  describe "redirect_to" do
@@ -12,7 +13,7 @@ describe "redirect_to" do
12
13
 
13
14
  it "passes" do
14
15
  expect do
15
- response.should redirect_to("destination")
16
+ expect(response).to redirect_to("destination")
16
17
  end.to_not raise_exception
17
18
  end
18
19
  end
@@ -24,7 +25,7 @@ describe "redirect_to" do
24
25
 
25
26
  it "uses failure message from assert_redirected_to" do
26
27
  expect do
27
- response.should redirect_to("destination")
28
+ expect(response).to redirect_to("destination")
28
29
  end.to raise_exception("this message")
29
30
  end
30
31
  end
@@ -36,7 +37,7 @@ describe "redirect_to" do
36
37
 
37
38
  it "raises that exception" do
38
39
  expect do
39
- response.should redirect_to("destination")
40
+ expect(response).to redirect_to("destination")
40
41
  end.to raise_exception("oops")
41
42
  end
42
43
  end
@@ -50,7 +51,7 @@ describe "redirect_to" do
50
51
 
51
52
  it "passes" do
52
53
  expect do
53
- response.should_not redirect_to("destination")
54
+ expect(response).not_to redirect_to("destination")
54
55
  end.to_not raise_exception
55
56
  end
56
57
  end
@@ -60,7 +61,7 @@ describe "redirect_to" do
60
61
 
61
62
  it "fails with custom failure message" do
62
63
  expect do
63
- response.should_not redirect_to("destination")
64
+ expect(response).not_to redirect_to("destination")
64
65
  end.to raise_exception(/expected not to redirect to \"destination\", but did/)
65
66
  end
66
67
  end
@@ -72,7 +73,7 @@ describe "redirect_to" do
72
73
 
73
74
  it "raises that exception" do
74
75
  expect do
75
- response.should_not redirect_to("destination")
76
+ expect(response).not_to redirect_to("destination")
76
77
  end.to raise_exception("oops")
77
78
  end
78
79
  end
@@ -7,25 +7,25 @@ describe "ActiveSupport::Relation =~ matcher" do
7
7
 
8
8
  if ::Rails::VERSION::STRING >= '4'
9
9
  it "verifies that the scope returns the records on the right hand side, regardless of order" do
10
- MockableModel.all.should =~ models.reverse
10
+ expect(MockableModel.all).to match_array(models.reverse)
11
11
  end
12
12
 
13
13
  it "fails if the scope encompasses more records than on the right hand side" do
14
14
  MockableModel.create
15
- MockableModel.all.should_not =~ models.reverse
15
+ expect(MockableModel.all).not_to match_array(models.reverse)
16
16
  end
17
17
  else
18
18
  it "verifies that the scope returns the records on the right hand side, regardless of order" do
19
- MockableModel.scoped.should =~ models.reverse
19
+ expect(MockableModel.scoped).to match_array(models.reverse)
20
20
  end
21
21
 
22
22
  it "fails if the scope encompasses more records than on the right hand side" do
23
23
  MockableModel.create
24
- MockableModel.scoped.should_not =~ models.reverse
24
+ expect(MockableModel.scoped).not_to match_array(models.reverse)
25
25
  end
26
26
  end
27
27
 
28
28
  it "fails if the scope encompasses fewer records than on the right hand side" do
29
- MockableModel.limit(models.length - 1).should_not =~ models.reverse
29
+ expect(MockableModel.limit(models.length - 1)).not_to match_array(models.reverse)
30
30
  end
31
31
  end
@@ -11,45 +11,45 @@ describe "route_to" do
11
11
  it "provides a description" do
12
12
  matcher = route_to("these" => "options")
13
13
  matcher.matches?(:get => "path")
14
- matcher.description.should == "route {:get=>\"path\"} to {\"these\"=>\"options\"}"
14
+ expect(matcher.description).to eq("route {:get=>\"path\"} to {\"these\"=>\"options\"}")
15
15
  end
16
16
 
17
17
  it "delegates to assert_recognizes" do
18
- self.should_receive(:assert_recognizes).with({ "these" => "options" }, { :method=> :get, :path=>"path" }, {})
19
- {:get => "path"}.should route_to("these" => "options")
18
+ expect(self).to receive(:assert_recognizes).with({ "these" => "options" }, { :method=> :get, :path=>"path" }, {})
19
+ expect({:get => "path"}).to route_to("these" => "options")
20
20
  end
21
21
 
22
22
  context "with shortcut syntax" do
23
23
  it "routes with extra options" do
24
- self.should_receive(:assert_recognizes).with({ :controller => "controller", :action => "action", :extra => "options"}, { :method=> :get, :path=>"path" }, {})
25
- get("path").should route_to("controller#action", :extra => "options")
24
+ expect(self).to receive(:assert_recognizes).with({ :controller => "controller", :action => "action", :extra => "options"}, { :method=> :get, :path=>"path" }, {})
25
+ expect(get("path")).to route_to("controller#action", :extra => "options")
26
26
  end
27
27
 
28
28
  it "routes without extra options" do
29
- self.should_receive(:assert_recognizes).with(
29
+ expect(self).to receive(:assert_recognizes).with(
30
30
  {:controller => "controller", :action => "action"},
31
31
  {:method=> :get, :path=>"path" },
32
32
  {}
33
33
  )
34
- get("path").should route_to("controller#action")
34
+ expect(get("path")).to route_to("controller#action")
35
35
  end
36
36
 
37
37
  it "routes with one query parameter" do
38
- self.should_receive(:assert_recognizes).with(
38
+ expect(self).to receive(:assert_recognizes).with(
39
39
  {:controller => "controller", :action => "action", :queryitem => "queryvalue"},
40
40
  {:method=> :get, :path=>"path" },
41
41
  {'queryitem' => 'queryvalue' }
42
42
  )
43
- get("path?queryitem=queryvalue").should route_to("controller#action", :queryitem => 'queryvalue')
43
+ expect(get("path?queryitem=queryvalue")).to route_to("controller#action", :queryitem => 'queryvalue')
44
44
  end
45
45
 
46
46
  it "routes with multiple query parameters" do
47
- self.should_receive(:assert_recognizes).with(
47
+ expect(self).to receive(:assert_recognizes).with(
48
48
  {:controller => "controller", :action => "action", :queryitem => "queryvalue", :qi2 => 'qv2'},
49
49
  {:method=> :get, :path=>"path"},
50
50
  {'queryitem' => 'queryvalue', 'qi2' => 'qv2'}
51
51
  )
52
- get("path?queryitem=queryvalue&qi2=qv2").should route_to("controller#action", :queryitem => 'queryvalue', :qi2 => 'qv2')
52
+ expect(get("path?queryitem=queryvalue&qi2=qv2")).to route_to("controller#action", :queryitem => 'queryvalue', :qi2 => 'qv2')
53
53
  end
54
54
 
55
55
  end
@@ -58,7 +58,7 @@ describe "route_to" do
58
58
  context "when assert_recognizes passes" do
59
59
  it "passes" do
60
60
  expect do
61
- {:get => "path"}.should route_to("these" => "options")
61
+ expect({:get => "path"}).to route_to("these" => "options")
62
62
  end.to_not raise_exception
63
63
  end
64
64
  end
@@ -69,7 +69,7 @@ describe "route_to" do
69
69
  raise ActiveSupport::TestCase::Assertion.new("this message")
70
70
  end
71
71
  expect do
72
- {:get => "path"}.should route_to("these" => "options")
72
+ expect({:get => "path"}).to route_to("these" => "options")
73
73
  end.to raise_error(RSpec::Expectations::ExpectationNotMetError, "this message")
74
74
  end
75
75
  end
@@ -80,7 +80,7 @@ describe "route_to" do
80
80
  raise ActionController::RoutingError.new("this message")
81
81
  end
82
82
  expect do
83
- {:get => "path"}.should route_to("these" => "options")
83
+ expect({:get => "path"}).to route_to("these" => "options")
84
84
  end.to raise_error(RSpec::Expectations::ExpectationNotMetError, "this message")
85
85
  end
86
86
  end
@@ -91,7 +91,7 @@ describe "route_to" do
91
91
  raise "oops"
92
92
  end
93
93
  expect do
94
- {:get => "path"}.should route_to("these" => "options")
94
+ expect({:get => "path"}).to route_to("these" => "options")
95
95
  end.to raise_exception("oops")
96
96
  end
97
97
  end
@@ -101,8 +101,8 @@ describe "route_to" do
101
101
  context "when assert_recognizes passes" do
102
102
  it "fails with custom message" do
103
103
  expect do
104
- {:get => "path"}.should_not route_to("these" => "options")
105
- end.to raise_error(/expected .* not to route to .*/)
104
+ expect({:get => "path"}).not_to route_to("these" => "options")
105
+ end.to raise_error(/expected {:get=>"path"} not to route to {"these"=>"options"}/)
106
106
  end
107
107
  end
108
108
 
@@ -112,7 +112,7 @@ describe "route_to" do
112
112
  raise ActiveSupport::TestCase::Assertion.new("this message")
113
113
  end
114
114
  expect do
115
- {:get => "path"}.should_not route_to("these" => "options")
115
+ expect({:get => "path"}).not_to route_to("these" => "options")
116
116
  end.to_not raise_error
117
117
  end
118
118
  end
@@ -123,7 +123,7 @@ describe "route_to" do
123
123
  raise ActionController::RoutingError.new("this message")
124
124
  end
125
125
  expect do
126
- {:get => "path"}.should_not route_to("these" => "options")
126
+ expect({:get => "path"}).not_to route_to("these" => "options")
127
127
  end.to_not raise_error
128
128
  end
129
129
  end
@@ -134,7 +134,7 @@ describe "route_to" do
134
134
  raise "oops"
135
135
  end
136
136
  expect do
137
- {:get => "path"}.should_not route_to("these" => "options")
137
+ expect({:get => "path"}).not_to route_to("these" => "options")
138
138
  end.to raise_exception("oops")
139
139
  end
140
140
  end
@@ -145,7 +145,7 @@ describe "route_to" do
145
145
  raise ActiveSupport::TestCase::Assertion, "this message"
146
146
  end
147
147
  expect do
148
- {"this" => "path"}.should route_to("these" => "options")
148
+ expect({"this" => "path"}).to route_to("these" => "options")
149
149
  end.to raise_error("this message")
150
150
  end
151
151
  end
@@ -19,4 +19,13 @@ describe RSpec::Rails::MinitestLifecycleAdapter do
19
19
  :before_setup, :after_setup, :example, :before_teardown, :after_teardown
20
20
  ])
21
21
  end
22
+
23
+ it "allows let variables named 'send'" do
24
+ run_result = ::RSpec::Core::ExampleGroup.describe do
25
+ let(:send) { "WHAT" }
26
+ specify { expect(send).to eq "WHAT" }
27
+ end.run NullObject.new
28
+
29
+ expect(run_result).to be true
30
+ end
22
31
  end
@@ -6,7 +6,7 @@ describe "mock_model(RealModel)" do
6
6
  context "that does not represent an existing constant" do
7
7
  it "class says it's name" do
8
8
  model = mock_model("Foo")
9
- model.class.name.should eq("Foo")
9
+ expect(model.class.name).to eq("Foo")
10
10
  end
11
11
  end
12
12
 
@@ -14,7 +14,7 @@ describe "mock_model(RealModel)" do
14
14
  context "that extends ActiveModel::Naming" do
15
15
  it "treats the constant as the class" do
16
16
  model = mock_model("MockableModel")
17
- model.class.name.should eq("MockableModel")
17
+ expect(model.class.name).to eq("MockableModel")
18
18
  end
19
19
  end
20
20
 
@@ -42,7 +42,7 @@ describe "mock_model(RealModel)" do
42
42
  end
43
43
 
44
44
  it "is named using the stubbed id value" do
45
- @model.instance_variable_get(:@name).should == "MockableModel_1"
45
+ expect(@model.instance_variable_get(:@name)).to eq("MockableModel_1")
46
46
  end
47
47
  end
48
48
 
@@ -50,7 +50,30 @@ describe "mock_model(RealModel)" do
50
50
  it "sets persisted to false" do
51
51
  model = mock_model(MockableModel)
52
52
  model.destroy
53
- model.should_not be_persisted
53
+ expect(model).not_to be_persisted
54
+ end
55
+ end
56
+
57
+ describe "association" do
58
+ it "constructs a mock association object" do
59
+ model = mock_model(MockableModel)
60
+ expect(model.association(:association_name)).to be
61
+ end
62
+
63
+ it "returns a different association object for each association name" do
64
+ model = mock_model(MockableModel)
65
+ posts = model.association(:posts)
66
+ authors = model.association(:authors)
67
+
68
+ expect(posts).not_to equal(authors)
69
+ end
70
+
71
+ it "returns the same association model each time for the same association name" do
72
+ model = mock_model(MockableModel)
73
+ posts1 = model.association(:posts)
74
+ posts2 = model.association(:posts)
75
+
76
+ expect(posts1).to equal(posts2)
54
77
  end
55
78
  end
56
79
 
@@ -58,21 +81,21 @@ describe "mock_model(RealModel)" do
58
81
  context "default" do
59
82
  it "is empty" do
60
83
  model = mock_model(MockableModel)
61
- model.errors.should be_empty
84
+ expect(model.errors).to be_empty
62
85
  end
63
86
  end
64
87
 
65
88
  context "with :save => false" do
66
89
  it "is not empty" do
67
90
  model = mock_model(MockableModel, :save => false)
68
- model.errors.should_not be_empty
91
+ expect(model.errors).not_to be_empty
69
92
  end
70
93
  end
71
94
 
72
95
  context "with :update_attributes => false" do
73
96
  it "is not empty" do
74
97
  model = mock_model(MockableModel, :save => false)
75
- model.errors.should_not be_empty
98
+ expect(model.errors).not_to be_empty
76
99
  end
77
100
  end
78
101
  end
@@ -81,7 +104,7 @@ describe "mock_model(RealModel)" do
81
104
  it "does not mutate its parameters" do
82
105
  params = {:a => 'b'}
83
106
  mock_model(MockableModel, params)
84
- params.should == {:a => 'b'}
107
+ expect(params).to eq({:a => 'b'})
85
108
  end
86
109
  end
87
110
 
@@ -93,11 +116,11 @@ describe "mock_model(RealModel)" do
93
116
  end
94
117
 
95
118
  it "passes: associated_model == mock" do
96
- @mock_model.should == @real.mockable_model
119
+ expect(@mock_model).to eq(@real.mockable_model)
97
120
  end
98
121
 
99
122
  it "passes: mock == associated_model" do
100
- @real.mockable_model.should == @mock_model
123
+ expect(@real.mockable_model).to eq(@mock_model)
101
124
  end
102
125
  end
103
126
 
@@ -109,11 +132,11 @@ describe "mock_model(RealModel)" do
109
132
  end
110
133
 
111
134
  it "passes: associated_model == mock" do
112
- @mock_model.should == @real.nonexistent_model
135
+ expect(@mock_model).to eq(@real.nonexistent_model)
113
136
  end
114
137
 
115
138
  it "passes: mock == associated_model" do
116
- @real.nonexistent_model.should == @mock_model
139
+ expect(@real.nonexistent_model).to eq(@mock_model)
117
140
  end
118
141
  end
119
142
 
@@ -123,15 +146,15 @@ describe "mock_model(RealModel)" do
123
146
  end
124
147
 
125
148
  it "says it is_a?(RealModel)" do
126
- @model.is_a?(SubMockableModel).should be(true)
149
+ expect(@model.is_a?(SubMockableModel)).to be(true)
127
150
  end
128
151
 
129
152
  it "says it is_a?(OtherModel) if RealModel is an ancestors" do
130
- @model.is_a?(MockableModel).should be(true)
153
+ expect(@model.is_a?(MockableModel)).to be(true)
131
154
  end
132
155
 
133
156
  it "can be stubbed" do
134
- mock_model(MockableModel, :is_a? => true).is_a?(:Foo).should be_truthy
157
+ expect(mock_model(MockableModel, :is_a? => true).is_a?(:Foo)).to be_truthy
135
158
  end
136
159
  end
137
160
 
@@ -141,15 +164,15 @@ describe "mock_model(RealModel)" do
141
164
  end
142
165
 
143
166
  it "says it is kind_of? if RealModel is" do
144
- @model.kind_of?(SubMockableModel).should be(true)
167
+ expect(@model.kind_of?(SubMockableModel)).to be(true)
145
168
  end
146
169
 
147
170
  it "says it is kind_of? if RealModel's ancestor is" do
148
- @model.kind_of?(MockableModel).should be(true)
171
+ expect(@model.kind_of?(MockableModel)).to be(true)
149
172
  end
150
173
 
151
174
  it "can be stubbed" do
152
- mock_model(MockableModel, :kind_of? => true).kind_of?(:Foo).should be_truthy
175
+ expect(mock_model(MockableModel, :kind_of? => true).kind_of?(:Foo)).to be_truthy
153
176
  end
154
177
  end
155
178
 
@@ -159,22 +182,22 @@ describe "mock_model(RealModel)" do
159
182
  end
160
183
 
161
184
  it "says it is instance_of? if RealModel is" do
162
- @model.instance_of?(SubMockableModel).should be(true)
185
+ expect(@model.instance_of?(SubMockableModel)).to be(true)
163
186
  end
164
187
 
165
188
  it "does not say it instance_of? if RealModel isn't, even if it's ancestor is" do
166
- @model.instance_of?(MockableModel).should be(false)
189
+ expect(@model.instance_of?(MockableModel)).to be(false)
167
190
  end
168
191
 
169
192
  it "can be stubbed" do
170
- mock_model(MockableModel, :instance_of? => true).instance_of?(:Foo).should be_truthy
193
+ expect(mock_model(MockableModel, :instance_of? => true).instance_of?(:Foo)).to be_truthy
171
194
  end
172
195
  end
173
196
 
174
197
  describe "#respond_to?" do
175
198
  context "with an ActiveRecord model" do
176
199
  before(:each) do
177
- MockableModel.stub(:column_names).and_return(["column_a", "column_b"])
200
+ allow(MockableModel).to receive(:column_names).and_return(["column_a", "column_b"])
178
201
  @model = mock_model(MockableModel)
179
202
  end
180
203
 
@@ -186,57 +209,57 @@ describe "mock_model(RealModel)" do
186
209
 
187
210
  context "without as_null_object" do
188
211
  it "says it will respond_to?(key) if RealModel has the attribute 'key'" do
189
- @model.respond_to?("column_a").should be(true)
212
+ expect(@model.respond_to?("column_a")).to be(true)
190
213
  end
191
214
  it "stubs column accessor (with string)" do
192
215
  @model.respond_to?("column_a")
193
- @model.column_a.should be_nil
216
+ expect(@model.column_a).to be_nil
194
217
  end
195
218
  it "stubs column accessor (with symbol)" do
196
219
  @model.respond_to?(:column_a)
197
- @model.column_a.should be_nil
220
+ expect(@model.column_a).to be_nil
198
221
  end
199
222
  it "does not stub column accessor if already stubbed in declaration (with string)" do
200
223
  model = mock_model(MockableModel, "column_a" => "a")
201
224
  model.respond_to?("column_a")
202
- model.column_a.should eq("a")
225
+ expect(model.column_a).to eq("a")
203
226
  end
204
227
  it "does not stub column accessor if already stubbed in declaration (with symbol)" do
205
228
  model = mock_model(MockableModel, :column_a => "a")
206
229
  model.respond_to?("column_a")
207
- model.column_a.should eq("a")
230
+ expect(model.column_a).to eq("a")
208
231
  end
209
232
  it "does not stub column accessor if already stubbed after declaration (with string)" do
210
- @model.stub("column_a" => "a")
233
+ allow(@model).to receive(:column_a).and_return("a")
211
234
  @model.respond_to?("column_a")
212
- @model.column_a.should eq("a")
235
+ expect(@model.column_a).to eq("a")
213
236
  end
214
237
  it "does not stub column accessor if already stubbed after declaration (with symbol)" do
215
- @model.stub(:column_a => "a")
238
+ allow(@model).to receive(:column_a).and_return("a")
216
239
  @model.respond_to?("column_a")
217
- @model.column_a.should eq("a")
240
+ expect(@model.column_a).to eq("a")
218
241
  end
219
242
  it "says it will not respond_to?(key) if RealModel does not have the attribute 'key'" do
220
- @model.respond_to?("column_c").should be(false)
243
+ expect(@model.respond_to?("column_c")).to be(false)
221
244
  end
222
245
  it "says it will not respond_to?(xxx_before_type_cast)" do
223
- @model.respond_to?("title_before_type_cast").should be(false)
246
+ expect(@model.respond_to?("title_before_type_cast")).to be(false)
224
247
  end
225
248
  end
226
-
249
+
227
250
  context "with as_null_object" do
228
251
  it "says it will respond_to?(key) if RealModel has the attribute 'key'" do
229
- @model.as_null_object.respond_to?("column_a").should be(true)
252
+ expect(@model.as_null_object.respond_to?("column_a")).to be(true)
230
253
  end
231
254
  it "says it will respond_to?(key) even if RealModel does not have the attribute 'key'" do
232
- @model.as_null_object.respond_to?("column_c").should be(true)
255
+ expect(@model.as_null_object.respond_to?("column_c")).to be(true)
233
256
  end
234
257
  it "says it will not respond_to?(xxx_before_type_cast)" do
235
- @model.as_null_object.respond_to?("title_before_type_cast").should be(false)
258
+ expect(@model.as_null_object.respond_to?("title_before_type_cast")).to be(false)
236
259
  end
237
260
  it "returns self for any unprepared message" do
238
261
  @model.as_null_object.tap do |x|
239
- x.non_existant_message.should be(@model)
262
+ expect(x.non_existant_message).to be(@model)
240
263
  end
241
264
  end
242
265
  end
@@ -245,39 +268,39 @@ describe "mock_model(RealModel)" do
245
268
  context "with a non-ActiveRecord model" do
246
269
  it "responds as normal" do
247
270
  model = NonActiveRecordModel.new
248
- model.should respond_to(:to_param)
271
+ expect(model).to respond_to(:to_param)
249
272
  end
250
273
 
251
274
  context "with as_null_object" do
252
275
  it "says it will not respond_to?(xxx_before_type_cast)" do
253
276
  model = NonActiveRecordModel.new.as_null_object
254
- model.respond_to?("title_before_type_cast").should be(false)
277
+ expect(model.respond_to?("title_before_type_cast")).to be(false)
255
278
  end
256
279
  end
257
280
  end
258
281
 
259
282
  it "can be stubbed" do
260
- mock_model(MockableModel, :respond_to? => true).respond_to?(:foo).should be_truthy
283
+ expect(mock_model(MockableModel, :respond_to? => true).respond_to?(:foo)).to be_truthy
261
284
  end
262
285
  end
263
286
 
264
287
  describe "#class" do
265
288
  it "returns the mocked model" do
266
- mock_model(MockableModel).class.should eq(MockableModel)
289
+ expect(mock_model(MockableModel).class).to eq(MockableModel)
267
290
  end
268
291
 
269
292
  it "can be stubbed" do
270
- mock_model(MockableModel, :class => String).class.should be(String)
293
+ expect(mock_model(MockableModel, :class => String).class).to be(String)
271
294
  end
272
295
  end
273
296
 
274
297
  describe "#to_s" do
275
298
  it "returns (model.name)_(model#to_param)" do
276
- mock_model(MockableModel).to_s.should == "MockableModel_#{to_param}"
299
+ expect(mock_model(MockableModel).to_s).to eq("MockableModel_#{to_param}")
277
300
  end
278
301
 
279
302
  it "can be stubbed" do
280
- mock_model(MockableModel, :to_s => "this string").to_s.should == "this string"
303
+ expect(mock_model(MockableModel, :to_s => "this string").to_s).to eq("this string")
281
304
  end
282
305
  end
283
306
 
@@ -285,7 +308,7 @@ describe "mock_model(RealModel)" do
285
308
  context "default" do
286
309
  it "returns false" do
287
310
  @model = mock_model(SubMockableModel)
288
- @model.destroyed?.should be(false)
311
+ expect(@model.destroyed?).to be(false)
289
312
  end
290
313
  end
291
314
  end
@@ -294,7 +317,7 @@ describe "mock_model(RealModel)" do
294
317
  context "default" do
295
318
  it "returns false" do
296
319
  @model = mock_model(SubMockableModel)
297
- @model.marked_for_destruction?.should be(false)
320
+ expect(@model.marked_for_destruction?).to be(false)
298
321
  end
299
322
  end
300
323
  end
@@ -302,19 +325,19 @@ describe "mock_model(RealModel)" do
302
325
  describe "#persisted?" do
303
326
  context "with default identifier" do
304
327
  it "returns true" do
305
- mock_model(MockableModel).should be_persisted
328
+ expect(mock_model(MockableModel)).to be_persisted
306
329
  end
307
330
  end
308
331
 
309
332
  context "with explicit identifier via :id" do
310
333
  it "returns true" do
311
- mock_model(MockableModel, :id => 37).should be_persisted
334
+ expect(mock_model(MockableModel, :id => 37)).to be_persisted
312
335
  end
313
336
  end
314
337
 
315
338
  context "with id => nil" do
316
339
  it "returns false" do
317
- mock_model(MockableModel, :id => nil).should_not be_persisted
340
+ expect(mock_model(MockableModel, :id => nil)).not_to be_persisted
318
341
  end
319
342
  end
320
343
  end
@@ -322,13 +345,13 @@ describe "mock_model(RealModel)" do
322
345
  describe "#valid?" do
323
346
  context "default" do
324
347
  it "returns true" do
325
- mock_model(MockableModel).should be_valid
348
+ expect(mock_model(MockableModel)).to be_valid
326
349
  end
327
350
  end
328
351
 
329
352
  context "stubbed with false" do
330
353
  it "returns false" do
331
- mock_model(MockableModel, :valid? => false).should_not be_valid
354
+ expect(mock_model(MockableModel, :valid? => false)).not_to be_valid
332
355
  end
333
356
  end
334
357
  end
@@ -336,26 +359,26 @@ describe "mock_model(RealModel)" do
336
359
  describe "#as_new_record" do
337
360
  it "says it is a new record" do
338
361
  m = mock_model(MockableModel)
339
- m.as_new_record.should be_new_record
362
+ expect(m.as_new_record).to be_new_record
340
363
  end
341
364
 
342
365
  it "says it is not persisted" do
343
366
  m = mock_model(MockableModel)
344
- m.as_new_record.should_not be_persisted
367
+ expect(m.as_new_record).not_to be_persisted
345
368
  end
346
369
 
347
370
  it "has a nil id" do
348
- mock_model(MockableModel).as_new_record.id.should be(nil)
371
+ expect(mock_model(MockableModel).as_new_record.id).to be(nil)
349
372
  end
350
373
 
351
374
  it "returns nil for #to_param" do
352
- mock_model(MockableModel).as_new_record.to_param.should be(nil)
375
+ expect(mock_model(MockableModel).as_new_record.to_param).to be(nil)
353
376
  end
354
377
  end
355
378
 
356
379
  describe "#blank?" do
357
380
  it "is false" do
358
- mock_model(MockableModel).should_not be_blank
381
+ expect(mock_model(MockableModel)).not_to be_blank
359
382
  end
360
383
  end
361
384