rspec-rails 2.99.0 → 3.0.0.beta1

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 (128) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.sig +2 -0
  3. data.tar.gz.sig +0 -0
  4. data/Changelog.md +40 -68
  5. data/License.txt +1 -0
  6. data/README.md +6 -4
  7. data/features/Generators.md +24 -0
  8. data/features/GettingStarted.md +84 -0
  9. data/features/README.md +56 -0
  10. data/features/RailsVersions.md +4 -0
  11. data/features/Transactions.md +84 -0
  12. data/features/Upgrade.md +121 -0
  13. data/features/controller_specs/Cookies.md +57 -0
  14. data/features/controller_specs/README.md +45 -0
  15. data/features/controller_specs/anonymous_controller.feature +378 -0
  16. data/features/controller_specs/bypass_rescue.feature +75 -0
  17. data/features/controller_specs/controller_spec.feature +58 -0
  18. data/features/controller_specs/engine_routes.feature +51 -0
  19. data/features/controller_specs/isolation_from_views.feature +87 -0
  20. data/features/controller_specs/render_views.feature +114 -0
  21. data/features/directory_structure.feature +71 -0
  22. data/features/feature_specs/feature_spec.feature +35 -0
  23. data/features/helper_specs/helper_spec.feature +122 -0
  24. data/features/mailer_specs/url_helpers.feature +38 -0
  25. data/features/matchers/README.md +18 -0
  26. data/features/matchers/new_record_matcher.feature +41 -0
  27. data/features/matchers/redirect_to_matcher.feature +40 -0
  28. data/features/matchers/relation_match_array.feature +27 -0
  29. data/features/matchers/render_template_matcher.feature +49 -0
  30. data/features/mocks/mock_model.feature +147 -0
  31. data/features/mocks/stub_model.feature +58 -0
  32. data/features/model_specs/README.md +21 -0
  33. data/features/model_specs/errors_on.feature +51 -0
  34. data/features/model_specs/records.feature +27 -0
  35. data/features/model_specs/transactional_examples.feature +109 -0
  36. data/features/request_specs/request_spec.feature +49 -0
  37. data/features/routing_specs/README.md +16 -0
  38. data/features/routing_specs/be_routable_matcher.feature +80 -0
  39. data/features/routing_specs/engine_routes.feature +38 -0
  40. data/features/routing_specs/named_routes.feature +18 -0
  41. data/features/routing_specs/route_to_matcher.feature +90 -0
  42. data/features/step_definitions/additional_cli_steps.rb +4 -0
  43. data/features/step_definitions/model_steps.rb +3 -0
  44. data/features/support/capybara.rb +7 -0
  45. data/features/support/env.rb +53 -0
  46. data/features/support/rails_versions.rb +4 -0
  47. data/features/support/rubinius.rb +6 -0
  48. data/features/view_specs/inferred_controller_path.feature +45 -0
  49. data/features/view_specs/stub_template.feature +51 -0
  50. data/features/view_specs/view_spec.feature +206 -0
  51. data/lib/generators/rspec/controller/templates/controller_spec.rb +1 -1
  52. data/lib/generators/rspec/install/templates/spec/spec_helper.rb.tt +2 -21
  53. data/lib/generators/rspec/integration/integration_generator.rb +2 -3
  54. data/lib/generators/rspec/integration/templates/request_spec.rb +1 -1
  55. data/lib/generators/rspec/mailer/templates/mailer_spec.rb +4 -4
  56. data/lib/generators/rspec/scaffold/scaffold_generator.rb +2 -3
  57. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +16 -16
  58. data/lib/generators/rspec/scaffold/templates/edit_spec.rb +2 -2
  59. data/lib/generators/rspec/scaffold/templates/index_spec.rb +1 -1
  60. data/lib/generators/rspec/scaffold/templates/new_spec.rb +2 -2
  61. data/lib/generators/rspec/scaffold/templates/routing_spec.rb +7 -7
  62. data/lib/generators/rspec/scaffold/templates/show_spec.rb +2 -2
  63. data/lib/rspec/rails.rb +0 -5
  64. data/lib/rspec/rails/adapters.rb +5 -12
  65. data/lib/rspec/rails/example.rb +55 -24
  66. data/lib/rspec/rails/example/controller_example_group.rb +7 -31
  67. data/lib/rspec/rails/example/view_example_group.rb +0 -3
  68. data/lib/rspec/rails/matchers.rb +1 -2
  69. data/lib/rspec/rails/matchers/be_a_new.rb +1 -1
  70. data/lib/rspec/rails/matchers/be_new_record.rb +1 -1
  71. data/lib/rspec/rails/matchers/be_valid.rb +1 -1
  72. data/lib/rspec/rails/matchers/have_rendered.rb +1 -1
  73. data/lib/rspec/rails/matchers/redirect_to.rb +1 -1
  74. data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
  75. data/lib/rspec/rails/matchers/routing_matchers.rb +6 -10
  76. data/lib/rspec/rails/mocks.rb +5 -41
  77. data/lib/rspec/rails/tasks/rspec.rake +5 -12
  78. data/lib/rspec/rails/vendor/capybara.rb +4 -35
  79. data/lib/rspec/rails/version.rb +1 -1
  80. data/spec/generators/rspec/controller/controller_generator_spec.rb +97 -0
  81. data/spec/generators/rspec/helper/helper_generator_spec.rb +30 -0
  82. data/spec/generators/rspec/install/install_generator_spec.rb +30 -0
  83. data/spec/generators/rspec/integration/integration_generator_spec.rb +44 -0
  84. data/spec/generators/rspec/mailer/mailer_generator_spec.rb +48 -0
  85. data/spec/generators/rspec/model/model_generator_spec.rb +52 -0
  86. data/spec/generators/rspec/observer/observer_generator_spec.rb +21 -0
  87. data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +138 -0
  88. data/spec/generators/rspec/view/view_generator_spec.rb +41 -0
  89. data/spec/rspec/rails/assertion_adapter_spec.rb +28 -0
  90. data/spec/rspec/rails/assertion_delegator_spec.rb +43 -0
  91. data/spec/rspec/rails/configuration_spec.rb +26 -0
  92. data/spec/rspec/rails/deprecations_spec.rb +18 -0
  93. data/spec/rspec/rails/example/controller_example_group_spec.rb +100 -0
  94. data/spec/rspec/rails/example/feature_example_group_spec.rb +56 -0
  95. data/spec/rspec/rails/example/helper_example_group_spec.rb +66 -0
  96. data/spec/rspec/rails/example/mailer_example_group_spec.rb +21 -0
  97. data/spec/rspec/rails/example/model_example_group_spec.rb +15 -0
  98. data/spec/rspec/rails/example/request_example_group_spec.rb +17 -0
  99. data/spec/rspec/rails/example/routing_example_group_spec.rb +32 -0
  100. data/spec/rspec/rails/example/view_example_group_spec.rb +220 -0
  101. data/spec/rspec/rails/extensions/active_model/errors_on_spec.rb +23 -0
  102. data/spec/rspec/rails/extensions/active_record/base_spec.rb +42 -0
  103. data/spec/rspec/rails/fixture_support_spec.rb +17 -0
  104. data/spec/rspec/rails/matchers/be_a_new_spec.rb +142 -0
  105. data/spec/rspec/rails/matchers/be_new_record_spec.rb +33 -0
  106. data/spec/rspec/rails/matchers/be_routable_spec.rb +41 -0
  107. data/spec/rspec/rails/matchers/be_valid_spec.rb +44 -0
  108. data/spec/rspec/rails/matchers/has_spec.rb +29 -0
  109. data/spec/rspec/rails/matchers/have_rendered_spec.rb +93 -0
  110. data/spec/rspec/rails/matchers/redirect_to_spec.rb +80 -0
  111. data/spec/rspec/rails/matchers/relation_match_array_spec.rb +31 -0
  112. data/spec/rspec/rails/matchers/route_to_spec.rb +151 -0
  113. data/spec/rspec/rails/minitest_lifecycle_adapter_spec.rb +22 -0
  114. data/spec/rspec/rails/mocks/mock_model_spec.rb +378 -0
  115. data/spec/rspec/rails/mocks/stub_model_spec.rb +154 -0
  116. data/spec/rspec/rails/setup_and_teardown_adapter_spec.rb +32 -0
  117. data/spec/rspec/rails/view_rendering_spec.rb +111 -0
  118. data/spec/spec_helper.rb +35 -0
  119. data/spec/support/ar_classes.rb +42 -0
  120. data/spec/support/helpers.rb +20 -0
  121. data/spec/support/matchers.rb +9 -0
  122. data/spec/support/null_object.rb +6 -0
  123. metadata +229 -42
  124. metadata.gz.sig +0 -0
  125. data/lib/autotest/rails_rspec2.rb +0 -91
  126. data/lib/rspec/rails/infer_type_configuration.rb +0 -26
  127. data/lib/rspec/rails/matchers/have_extension.rb +0 -36
  128. data/lib/rspec/rails/module_inclusion.rb +0 -19
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rspec/helper/helper_generator'
5
+
6
+ describe Rspec::Generators::HelperGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+
10
+ before { prepare_destination }
11
+
12
+ subject { file('spec/helpers/posts_helper_spec.rb') }
13
+ describe 'generated by default' do
14
+ before do
15
+ run_generator %w(posts)
16
+ end
17
+
18
+ describe 'the spec' do
19
+ it { should exist }
20
+ it { should contain(/require 'spec_helper'/) }
21
+ it { should contain(/describe PostsHelper/) }
22
+ end
23
+ end
24
+ describe 'skipped with a flag' do
25
+ before do
26
+ run_generator %w(posts --no-helper_specs)
27
+ end
28
+ it { should_not exist }
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'generators/rspec/install/install_generator'
3
+
4
+ describe Rspec::Generators::InstallGenerator do
5
+ destination File.expand_path("../../../../../tmp", __FILE__)
6
+
7
+ before { prepare_destination }
8
+
9
+ it "generates .rspec" do
10
+ run_generator
11
+ file('.rspec').should exist
12
+ end
13
+
14
+ it "generates spec/spec_helper.rb" do
15
+ run_generator
16
+ File.read( file('spec/spec_helper.rb') ).should =~ /^require 'rspec\/autorun'$/m
17
+ end
18
+
19
+ if ::Rails::VERSION::STRING >= '4'
20
+ it "generates spec/spec_helper.rb with a check for pending migrations" do
21
+ run_generator
22
+ File.read( file('spec/spec_helper.rb') ).should =~ /ActiveRecord::Migration\.check_pending!/m
23
+ end
24
+ else
25
+ it "generates spec/spec_helper.rb without a check for pending migrations" do
26
+ run_generator
27
+ File.read( file('spec/spec_helper.rb') ).should_not =~ /ActiveRecord::Migration\.check_pending!/m
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rspec/integration/integration_generator'
5
+
6
+ describe Rspec::Generators::IntegrationGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+
10
+ before { prepare_destination }
11
+
12
+ describe 'are not generated' do
13
+ before do
14
+ run_generator %w(posts --no-request-specs)
15
+ end
16
+ describe 'index.html.erb' do
17
+ subject { file('spec/requests/posts_spec.rb') }
18
+ it { should_not exist }
19
+ end
20
+ end
21
+
22
+ describe 'are generated' do
23
+ describe 'without webrat matchers by default' do
24
+ before do
25
+ run_generator %w(posts)
26
+ end
27
+ subject { file('spec/requests/posts_spec.rb') }
28
+ it { should exist }
29
+ it { should contain(/require 'spec_helper'/) }
30
+ it { should contain(/describe "GET \/posts"/) }
31
+ it { should contain(/get posts_index_path/) }
32
+ end
33
+ describe 'with webrat matchers' do
34
+ before do
35
+ run_generator %w(posts --webrat)
36
+ end
37
+ subject { file('spec/requests/posts_spec.rb') }
38
+ it { should exist }
39
+ it { should contain(/require 'spec_helper'/) }
40
+ it { should contain(/describe "GET \/posts"/) }
41
+ it { should contain(/visit posts_index_path/) }
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rspec/mailer/mailer_generator'
5
+
6
+ describe Rspec::Generators::MailerGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+
10
+ before { prepare_destination }
11
+
12
+ describe 'mailer spec' do
13
+ subject { file('spec/mailers/posts_spec.rb') }
14
+ describe 'a spec is created for each action' do
15
+ before do
16
+ run_generator %w(posts index show)
17
+ end
18
+ it { should exist }
19
+ it { should contain(/require "spec_helper"/) }
20
+ it { should contain(/describe "index" do/) }
21
+ it { should contain(/describe "show" do/) }
22
+ end
23
+ describe 'creates placeholder when no actions specified' do
24
+ before do
25
+ run_generator %w(posts)
26
+ end
27
+ it { should exist }
28
+ it { should contain(/require "spec_helper"/) }
29
+ it { should contain(/pending "add some examples to \(or delete\)/) }
30
+ end
31
+ end
32
+
33
+ describe 'a fixture is generated for each action' do
34
+ before do
35
+ run_generator %w(posts index show)
36
+ end
37
+ describe 'index' do
38
+ subject { file('spec/fixtures/posts/index') }
39
+ it { should exist }
40
+ it { should contain(/Posts#index/) }
41
+ end
42
+ describe 'show' do
43
+ subject { file('spec/fixtures/posts/show') }
44
+ it { should exist }
45
+ it { should contain(/Posts#show/) }
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rspec/model/model_generator'
5
+
6
+ describe Rspec::Generators::ModelGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+
10
+ before { prepare_destination }
11
+
12
+ it 'runs both the model and fixture tasks' do
13
+ gen = generator %w(posts)
14
+ gen.should_receive :create_model_spec
15
+ gen.should_receive :create_fixture_file
16
+ capture(:stdout) { gen.invoke_all }
17
+ end
18
+
19
+ describe 'the generated files' do
20
+ describe 'with fixtures' do
21
+ before do
22
+ run_generator %w(posts --fixture)
23
+ end
24
+
25
+ describe 'the spec' do
26
+ subject { file('spec/models/posts_spec.rb') }
27
+
28
+ it { should exist }
29
+ it { should contain(/require 'spec_helper'/) }
30
+ it { should contain(/describe Posts/) }
31
+ end
32
+
33
+ describe 'the fixtures' do
34
+ subject { file('spec/fixtures/posts.yml') }
35
+
36
+ it { should contain(Regexp.new('# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html')) }
37
+ end
38
+ end
39
+
40
+ describe 'without fixtures' do
41
+ before do
42
+ run_generator %w(posts)
43
+ end
44
+
45
+ describe 'the fixtures' do
46
+ subject { file('spec/fixtures/posts.yml') }
47
+
48
+ it { should_not exist }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rspec/observer/observer_generator'
5
+
6
+ describe Rspec::Generators::ObserverGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+
10
+ subject { file('spec/models/posts_observer_spec.rb') }
11
+ before do
12
+ prepare_destination
13
+ run_generator %w(posts)
14
+ end
15
+
16
+ describe 'the spec' do
17
+ it { should exist }
18
+ it { should contain(/require 'spec_helper'/) }
19
+ it { should contain(/describe PostsObserver/) }
20
+ end
21
+ end
@@ -0,0 +1,138 @@
1
+ require 'spec_helper'
2
+
3
+ require 'generators/rspec/scaffold/scaffold_generator'
4
+
5
+ describe Rspec::Generators::ScaffoldGenerator do
6
+ destination File.expand_path("../../../../../tmp", __FILE__)
7
+
8
+ before { prepare_destination }
9
+
10
+ describe 'standard controller spec' do
11
+ subject { file('spec/controllers/posts_controller_spec.rb') }
12
+
13
+ describe 'with no options' do
14
+ before { run_generator %w(posts) }
15
+ it { should contain(/require 'spec_helper'/) }
16
+ it { should contain(/describe PostsController/) }
17
+ it { should contain(%({ "these" => "params" })) }
18
+ end
19
+
20
+ describe 'with --no-controller_specs' do
21
+ before { run_generator %w(posts --no-controller_specs) }
22
+ it { should_not exist }
23
+ end
24
+ end
25
+
26
+ describe 'controller spec with attributes specified' do
27
+ subject { file('spec/controllers/posts_controller_spec.rb') }
28
+ before { run_generator %w(posts title:string) }
29
+
30
+ it { should contain(%({ "title" => "MyString" })) }
31
+ end
32
+
33
+ describe 'namespaced controller spec' do
34
+ subject { file('spec/controllers/admin/posts_controller_spec.rb') }
35
+ before { run_generator %w(admin/posts) }
36
+ it { should contain(/describe Admin::PostsController/)}
37
+ end
38
+
39
+ describe 'view specs' do
40
+ describe 'with no options' do
41
+ before { run_generator %w(posts) }
42
+ describe 'edit' do
43
+ subject { file("spec/views/posts/edit.html.erb_spec.rb") }
44
+ it { should exist }
45
+ it { should contain(/require 'spec_helper'/) }
46
+ it { should contain(/describe "(.*)\/edit"/) }
47
+ it { should contain(/it "renders the edit (.*) form"/) }
48
+ end
49
+
50
+ describe 'index' do
51
+ subject { file("spec/views/posts/index.html.erb_spec.rb") }
52
+ it { should exist }
53
+ it { should contain(/require 'spec_helper'/) }
54
+ it { should contain(/describe "(.*)\/index"/) }
55
+ it { should contain(/it "renders a list of (.*)"/) }
56
+ end
57
+
58
+ describe 'new' do
59
+ subject { file("spec/views/posts/new.html.erb_spec.rb") }
60
+ it { should exist }
61
+ it { should contain(/require 'spec_helper'/) }
62
+ it { should contain(/describe "(.*)\/new"/) }
63
+ it { should contain(/it "renders new (.*) form"/) }
64
+ end
65
+
66
+ describe 'show' do
67
+ subject { file("spec/views/posts/show.html.erb_spec.rb") }
68
+ it { should exist }
69
+ it { should contain(/require 'spec_helper'/) }
70
+ it { should contain(/describe "(.*)\/show"/) }
71
+ it { should contain(/it "renders attributes in <p>"/) }
72
+ end
73
+ end
74
+
75
+ describe 'with --no-template-engine' do
76
+ before { run_generator %w(posts --no-template-engine) }
77
+ describe 'edit' do
78
+ subject { file("spec/views/posts/edit.html._spec.rb") }
79
+ it { should_not exist }
80
+ end
81
+
82
+ describe 'index' do
83
+ subject { file("spec/views/posts/index.html._spec.rb") }
84
+ it { should_not exist }
85
+ end
86
+
87
+ describe 'new' do
88
+ subject { file("spec/views/posts/new.html._spec.rb") }
89
+ it { should_not exist }
90
+ end
91
+
92
+ describe 'show' do
93
+ subject { file("spec/views/posts/show.html._spec.rb") }
94
+ it { should_not exist }
95
+ end
96
+ end
97
+
98
+ describe 'with --no-view-specs' do
99
+ before { run_generator %w(posts --no-view-specs) }
100
+
101
+ describe 'edit' do
102
+ subject { file("spec/views/posts/edit.html.erb_spec.rb") }
103
+ it { should_not exist }
104
+ end
105
+
106
+ describe 'index' do
107
+ subject { file("spec/views/posts/index.html.erb_spec.rb") }
108
+ it { should_not exist }
109
+ end
110
+
111
+ describe 'new' do
112
+ subject { file("spec/views/posts/new.html.erb_spec.rb") }
113
+ it { should_not exist }
114
+ end
115
+
116
+ describe 'show' do
117
+ subject { file("spec/views/posts/show.html.erb_spec.rb") }
118
+ it { should_not exist }
119
+ end
120
+ end
121
+ end
122
+
123
+ describe 'routing spec' do
124
+ subject { file('spec/routing/posts_routing_spec.rb') }
125
+
126
+ describe 'with default options' do
127
+ before { run_generator %w(posts) }
128
+ it { should contain(/require "spec_helper"/) }
129
+ it { should contain(/describe PostsController/) }
130
+ it { should contain(/describe "routing"/) }
131
+ end
132
+
133
+ describe 'with --no-routing-specs' do
134
+ before { run_generator %w(posts --no-routing_specs) }
135
+ it { should_not exist }
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rspec/view/view_generator'
5
+
6
+ describe Rspec::Generators::ViewGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+
10
+ before { prepare_destination }
11
+
12
+ describe 'with default template engine' do
13
+ it 'generates a spec for the supplied action' do
14
+ run_generator %w(posts index)
15
+ file('spec/views/posts/index.html.erb_spec.rb').tap do |f|
16
+ f.should contain(/require 'spec_helper'/)
17
+ f.should contain(/describe "posts\/index"/)
18
+ end
19
+ end
20
+
21
+ describe 'with a nested resource' do
22
+ it 'generates a spec for the supplied action' do
23
+ run_generator %w(admin/posts index)
24
+ file('spec/views/admin/posts/index.html.erb_spec.rb').tap do |f|
25
+ f.should contain(/require 'spec_helper'/)
26
+ f.should contain(/describe "admin\/posts\/index"/)
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ describe 'with a specified template engine' do
33
+ it 'generates a spec for the supplied action' do
34
+ run_generator %w(posts index --template_engine haml)
35
+ file('spec/views/posts/index.html.haml_spec.rb').tap do |f|
36
+ f.should contain(/require 'spec_helper'/)
37
+ f.should contain(/describe "posts\/index"/)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe RSpec::Rails::MinitestAssertionAdapter do
4
+ include RSpec::Rails::MinitestAssertionAdapter
5
+
6
+ RSpec::Rails::Assertions.public_instance_methods.select{|m| m.to_s =~ /^(assert|flunk|refute)/}.each do |m|
7
+ if m.to_s == "assert_equal"
8
+ it "exposes #{m} to host examples" do
9
+ assert_equal 3,3
10
+ expect do
11
+ assert_equal 3,4
12
+ end.to raise_error(ActiveSupport::TestCase::Assertion)
13
+ end
14
+ else
15
+ it "exposes #{m} to host examples" do
16
+ methods.should include(m)
17
+ end
18
+ end
19
+ end
20
+
21
+ it "does not expose internal methods of Minitest" do
22
+ methods.should_not include("_assertions")
23
+ end
24
+
25
+ it "does not expose Minitest's message method" do
26
+ methods.should_not include("message")
27
+ end
28
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe RSpec::Rails::AssertionDelegator do
4
+ it "provides a module that delegates assertion methods to an isolated class" do
5
+ klass = Class.new {
6
+ include RSpec::Rails::AssertionDelegator.new(RSpec::Rails::Assertions)
7
+ }
8
+
9
+ expect(klass.new).to respond_to(:assert)
10
+ end
11
+
12
+ it "delegates back to the including instance for methods the assertion module requires" do
13
+ assertions = Module.new {
14
+ def has_thing?(thing)
15
+ self.things.include?(thing)
16
+ end
17
+ }
18
+
19
+ klass = Class.new {
20
+ include RSpec::Rails::AssertionDelegator.new(assertions)
21
+
22
+ def things
23
+ [:a]
24
+ end
25
+ }
26
+
27
+ expect(klass.new).to have_thing(:a)
28
+ expect(klass.new).not_to have_thing(:b)
29
+ end
30
+
31
+ it "does not delegate method_missing" do
32
+ assertions = Module.new {
33
+ def method_missing(method, *args)
34
+ end
35
+ }
36
+
37
+ klass = Class.new {
38
+ include RSpec::Rails::AssertionDelegator.new(assertions)
39
+ }
40
+
41
+ expect { klass.new.abc123 }.to raise_error(NoMethodError)
42
+ end
43
+ end