rspec-rails 3.0.2 → 5.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.document +1 -1
- data/.yardopts +3 -1
- data/Capybara.md +6 -55
- data/Changelog.md +619 -43
- data/{License.txt → LICENSE.md} +5 -3
- data/README.md +278 -444
- data/lib/generators/rspec/channel/channel_generator.rb +12 -0
- data/lib/generators/rspec/{observer/templates/observer_spec.rb → channel/templates/channel_spec.rb.erb} +1 -1
- data/lib/generators/rspec/controller/controller_generator.rb +22 -5
- data/lib/generators/rspec/controller/templates/controller_spec.rb +3 -3
- data/lib/generators/rspec/controller/templates/request_spec.rb +19 -0
- data/lib/generators/rspec/controller/templates/routing_spec.rb +13 -0
- data/lib/generators/rspec/controller/templates/view_spec.rb +1 -1
- data/lib/generators/rspec/feature/feature_generator.rb +15 -2
- data/lib/generators/rspec/feature/templates/feature_singular_spec.rb +5 -0
- data/lib/generators/rspec/feature/templates/feature_spec.rb +1 -1
- data/lib/generators/rspec/generator/generator_generator.rb +24 -0
- data/lib/generators/rspec/generator/templates/generator_spec.rb +6 -0
- data/lib/generators/rspec/helper/helper_generator.rb +1 -1
- data/lib/generators/rspec/helper/templates/helper_spec.rb +1 -1
- data/lib/generators/rspec/install/install_generator.rb +22 -5
- data/lib/generators/rspec/install/templates/spec/rails_helper.rb +43 -14
- data/lib/generators/rspec/integration/integration_generator.rb +7 -2
- data/lib/generators/rspec/integration/templates/request_spec.rb +3 -3
- data/lib/generators/rspec/job/job_generator.rb +13 -0
- data/lib/generators/rspec/job/templates/job_spec.rb.erb +7 -0
- data/lib/generators/rspec/mailbox/mailbox_generator.rb +14 -0
- data/lib/generators/rspec/mailbox/templates/mailbox_spec.rb.erb +7 -0
- data/lib/generators/rspec/mailer/mailer_generator.rb +8 -1
- data/lib/generators/rspec/mailer/templates/mailer_spec.rb +2 -2
- data/lib/generators/rspec/mailer/templates/preview.rb +13 -0
- data/lib/generators/rspec/model/model_generator.rb +20 -6
- data/lib/generators/rspec/model/templates/fixtures.yml +1 -1
- data/lib/generators/rspec/model/templates/model_spec.rb +1 -1
- data/lib/generators/rspec/request/request_generator.rb +10 -0
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +90 -113
- data/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +129 -0
- data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +46 -64
- data/lib/generators/rspec/scaffold/templates/edit_spec.rb +3 -3
- data/lib/generators/rspec/scaffold/templates/index_spec.rb +3 -3
- data/lib/generators/rspec/scaffold/templates/new_spec.rb +3 -3
- data/lib/generators/rspec/scaffold/templates/request_spec.rb +138 -0
- data/lib/generators/rspec/scaffold/templates/routing_spec.rb +18 -11
- data/lib/generators/rspec/scaffold/templates/show_spec.rb +2 -2
- data/lib/generators/rspec/system/system_generator.rb +24 -0
- data/lib/generators/rspec/system/templates/system_spec.rb +9 -0
- data/lib/generators/rspec/view/templates/view_spec.rb +1 -1
- data/lib/generators/rspec/view/view_generator.rb +2 -2
- data/lib/generators/rspec.rb +12 -10
- data/lib/rspec/rails/active_record.rb +25 -0
- data/lib/rspec/rails/adapters.rb +34 -28
- data/lib/rspec/rails/configuration.rb +135 -40
- data/lib/rspec/rails/example/channel_example_group.rb +93 -0
- data/lib/rspec/rails/example/controller_example_group.rb +185 -149
- data/lib/rspec/rails/example/feature_example_group.rb +43 -23
- data/lib/rspec/rails/example/helper_example_group.rb +28 -25
- data/lib/rspec/rails/example/job_example_group.rb +23 -0
- data/lib/rspec/rails/example/mailbox_example_group.rb +80 -0
- data/lib/rspec/rails/example/mailer_example_group.rb +27 -22
- data/lib/rspec/rails/example/model_example_group.rb +9 -6
- data/lib/rspec/rails/example/rails_example_group.rb +3 -2
- data/lib/rspec/rails/example/request_example_group.rb +21 -17
- data/lib/rspec/rails/example/routing_example_group.rb +49 -39
- data/lib/rspec/rails/example/system_example_group.rb +125 -0
- data/lib/rspec/rails/example/view_example_group.rb +178 -134
- data/lib/rspec/rails/example.rb +4 -0
- data/lib/rspec/rails/extensions/active_record/proxy.rb +5 -11
- data/lib/rspec/rails/feature_check.rb +47 -0
- data/lib/rspec/rails/file_fixture_support.rb +15 -0
- data/lib/rspec/rails/fixture_file_upload_support.rb +56 -0
- data/lib/rspec/rails/fixture_support.rb +42 -13
- data/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +170 -0
- data/lib/rspec/rails/matchers/action_cable/have_streams.rb +58 -0
- data/lib/rspec/rails/matchers/action_cable.rb +65 -0
- data/lib/rspec/rails/matchers/action_mailbox.rb +73 -0
- data/lib/rspec/rails/matchers/active_job.rb +465 -0
- data/lib/rspec/rails/matchers/base_matcher.rb +179 -0
- data/lib/rspec/rails/matchers/be_a_new.rb +70 -64
- data/lib/rspec/rails/matchers/be_new_record.rb +25 -20
- data/lib/rspec/rails/matchers/be_valid.rb +39 -34
- data/lib/rspec/rails/matchers/have_enqueued_mail.rb +226 -0
- data/lib/rspec/rails/matchers/have_http_status.rb +363 -333
- data/lib/rspec/rails/matchers/have_rendered.rb +55 -32
- data/lib/rspec/rails/matchers/redirect_to.rb +30 -27
- data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
- data/lib/rspec/rails/matchers/routing_matchers.rb +107 -101
- data/lib/rspec/rails/matchers.rb +20 -12
- data/lib/rspec/rails/tasks/rspec.rake +7 -17
- data/lib/rspec/rails/vendor/capybara.rb +12 -11
- data/lib/rspec/rails/version.rb +1 -1
- data/lib/rspec/rails/view_assigns.rb +1 -2
- data/lib/rspec/rails/view_path_builder.rb +29 -0
- data/lib/rspec/rails/view_rendering.rb +87 -27
- data/lib/rspec/rails/view_spec_methods.rb +56 -0
- data/lib/rspec/rails.rb +9 -1
- data/lib/rspec-rails.rb +62 -3
- data.tar.gz.sig +0 -0
- metadata +118 -72
- metadata.gz.sig +0 -0
- data/lib/generators/rspec/observer/observer_generator.rb +0 -13
@@ -1,41 +1,64 @@
|
|
1
|
-
module RSpec
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module RSpec
|
2
|
+
module Rails
|
3
|
+
module Matchers
|
4
|
+
# Matcher for template rendering.
|
5
|
+
module RenderTemplate
|
6
|
+
# @private
|
7
|
+
class RenderTemplateMatcher < RSpec::Rails::Matchers::BaseMatcher
|
8
|
+
def initialize(scope, expected, message = nil)
|
9
|
+
@expected = Symbol === expected ? expected.to_s : expected
|
10
|
+
@message = message
|
11
|
+
@scope = scope
|
12
|
+
@redirect_is = nil
|
13
|
+
end
|
6
14
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
# @api private
|
16
|
+
def matches?(*)
|
17
|
+
match_check = match_unless_raises ActiveSupport::TestCase::Assertion do
|
18
|
+
@scope.assert_template expected, @message
|
19
|
+
end
|
20
|
+
check_redirect unless match_check
|
21
|
+
match_check
|
22
|
+
end
|
23
|
+
|
24
|
+
# Uses normalize_argument_to_redirection to find and format
|
25
|
+
# the redirect location. normalize_argument_to_redirection is private
|
26
|
+
# in ActionDispatch::Assertions::ResponseAssertions so we call it
|
27
|
+
# here using #send. This will keep the error message format consistent
|
28
|
+
# @api private
|
29
|
+
def check_redirect
|
30
|
+
response = @scope.response
|
31
|
+
return unless response.respond_to?(:redirect?) && response.redirect?
|
32
|
+
|
33
|
+
@redirect_is = @scope.send(:normalize_argument_to_redirection, response.location)
|
34
|
+
end
|
12
35
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
36
|
+
# @api private
|
37
|
+
def failure_message
|
38
|
+
if @redirect_is
|
39
|
+
rescued_exception.message[/(.*?)( but|$)/, 1] +
|
40
|
+
" but was a redirect to <#{@redirect_is}>"
|
41
|
+
else
|
42
|
+
rescued_exception.message
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# @api private
|
47
|
+
def failure_message_when_negated
|
48
|
+
"expected not to render #{expected.inspect}, but did"
|
49
|
+
end
|
17
50
|
end
|
18
|
-
end
|
19
51
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
52
|
+
# Delegates to `assert_template`.
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# expect(response).to have_rendered("new")
|
56
|
+
def have_rendered(options, message = nil)
|
57
|
+
RenderTemplateMatcher.new(self, options, message)
|
58
|
+
end
|
24
59
|
|
25
|
-
|
26
|
-
def failure_message_when_negated
|
27
|
-
"expected not to render #{expected.inspect}, but did"
|
60
|
+
alias_method :render_template, :have_rendered
|
28
61
|
end
|
29
62
|
end
|
30
|
-
|
31
|
-
# Delegates to `assert_template`.
|
32
|
-
#
|
33
|
-
# @example
|
34
|
-
# expect(response).to have_rendered("new")
|
35
|
-
def have_rendered(options, message=nil)
|
36
|
-
RenderTemplateMatcher.new(self, options, message)
|
37
|
-
end
|
38
|
-
|
39
|
-
alias_method :render_template, :have_rendered
|
40
63
|
end
|
41
64
|
end
|
@@ -1,35 +1,38 @@
|
|
1
|
-
module RSpec
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module RSpec
|
2
|
+
module Rails
|
3
|
+
module Matchers
|
4
|
+
# Matcher for redirects.
|
5
|
+
module RedirectTo
|
6
|
+
# @private
|
7
|
+
class RedirectTo < RSpec::Rails::Matchers::BaseMatcher
|
8
|
+
def initialize(scope, expected)
|
9
|
+
@expected = expected
|
10
|
+
@scope = scope
|
11
|
+
end
|
6
12
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
13
|
+
def matches?(_)
|
14
|
+
match_unless_raises ActiveSupport::TestCase::Assertion do
|
15
|
+
@scope.assert_redirected_to(@expected)
|
16
|
+
end
|
17
|
+
end
|
11
18
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
19
|
+
def failure_message
|
20
|
+
rescued_exception.message
|
21
|
+
end
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
def failure_message_when_negated
|
24
|
+
"expected not to redirect to #{@expected.inspect}, but did"
|
25
|
+
end
|
26
|
+
end
|
21
27
|
|
22
|
-
|
23
|
-
|
28
|
+
# Delegates to `assert_redirected_to`.
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# expect(response).to redirect_to(:action => "new")
|
32
|
+
def redirect_to(target)
|
33
|
+
RedirectTo.new(self, target)
|
34
|
+
end
|
24
35
|
end
|
25
36
|
end
|
26
|
-
|
27
|
-
# Delegates to `assert_redirected_to`.
|
28
|
-
#
|
29
|
-
# @example
|
30
|
-
# expect(response).to redirect_to(:action => "new")
|
31
|
-
def redirect_to(target)
|
32
|
-
RedirectTo.new(self, target)
|
33
|
-
end
|
34
37
|
end
|
35
38
|
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
if defined?(ActiveRecord::Relation)
|
1
|
+
if defined?(ActiveRecord::Relation) && defined?(RSpec::Matchers::BuiltIn::OperatorMatcher) # RSpec 4 removed OperatorMatcher
|
2
2
|
RSpec::Matchers::BuiltIn::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::BuiltIn::ContainExactly)
|
3
3
|
end
|
@@ -1,117 +1,123 @@
|
|
1
|
-
module RSpec
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module RSpec
|
2
|
+
module Rails
|
3
|
+
module Matchers
|
4
|
+
# Matchers to help with specs for routing code.
|
5
|
+
module RoutingMatchers
|
6
|
+
extend RSpec::Matchers::DSL
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
# @private
|
9
|
+
class RouteToMatcher < RSpec::Rails::Matchers::BaseMatcher
|
10
|
+
def initialize(scope, *expected)
|
11
|
+
@scope = scope
|
12
|
+
@expected = expected[1] || {}
|
13
|
+
if Hash === expected[0]
|
14
|
+
@expected.merge!(expected[0])
|
15
|
+
else
|
16
|
+
controller, action = expected[0].split('#')
|
17
|
+
@expected.merge!(controller: controller, action: action)
|
18
|
+
end
|
19
|
+
end
|
8
20
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
21
|
+
def matches?(verb_to_path_map)
|
22
|
+
@actual = verb_to_path_map
|
23
|
+
# assert_recognizes does not consider ActionController::RoutingError an
|
24
|
+
# assertion failure, so we have to capture that and Assertion here.
|
25
|
+
match_unless_raises ActiveSupport::TestCase::Assertion, ActionController::RoutingError do
|
26
|
+
path, query = *verb_to_path_map.values.first.split('?')
|
27
|
+
@scope.assert_recognizes(
|
28
|
+
@expected,
|
29
|
+
{method: verb_to_path_map.keys.first, path: path},
|
30
|
+
Rack::Utils.parse_nested_query(query)
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
19
34
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
# assertion failure, so we have to capture that and Assertion here.
|
24
|
-
match_unless_raises ActiveSupport::TestCase::Assertion, ActionController::RoutingError do
|
25
|
-
path, query = *verb_to_path_map.values.first.split('?')
|
26
|
-
@scope.assert_recognizes(
|
27
|
-
@expected,
|
28
|
-
{:method => verb_to_path_map.keys.first, :path => path},
|
29
|
-
Rack::Utils::parse_nested_query(query)
|
30
|
-
)
|
31
|
-
end
|
32
|
-
end
|
35
|
+
def failure_message
|
36
|
+
rescued_exception.message
|
37
|
+
end
|
33
38
|
|
34
|
-
|
35
|
-
|
36
|
-
|
39
|
+
def failure_message_when_negated
|
40
|
+
"expected #{@actual.inspect} not to route to #{@expected.inspect}"
|
41
|
+
end
|
37
42
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
def description
|
43
|
-
"route #{@actual.inspect} to #{@expected.inspect}"
|
44
|
-
end
|
45
|
-
end
|
43
|
+
def description
|
44
|
+
"route #{@actual.inspect} to #{@expected.inspect}"
|
45
|
+
end
|
46
|
+
end
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
48
|
+
# Delegates to `assert_recognizes`. Supports short-hand controller/action
|
49
|
+
# declarations (e.g. `"controller#action"`).
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
#
|
53
|
+
# expect(get: "/things/special").to route_to(
|
54
|
+
# controller: "things",
|
55
|
+
# action: "special"
|
56
|
+
# )
|
57
|
+
#
|
58
|
+
# expect(get: "/things/special").to route_to("things#special")
|
59
|
+
#
|
60
|
+
# @see https://api.rubyonrails.org/classes/ActionDispatch/Assertions/RoutingAssertions.html#method-i-assert_recognizes
|
61
|
+
def route_to(*expected)
|
62
|
+
RouteToMatcher.new(self, *expected)
|
63
|
+
end
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
# @private
|
66
|
+
class BeRoutableMatcher < RSpec::Rails::Matchers::BaseMatcher
|
67
|
+
def initialize(scope)
|
68
|
+
@scope = scope
|
69
|
+
end
|
66
70
|
|
67
|
-
|
68
|
-
|
69
|
-
|
71
|
+
def matches?(path)
|
72
|
+
@actual = path
|
73
|
+
match_unless_raises ActionController::RoutingError do
|
74
|
+
@routing_options = @scope.routes.recognize_path(
|
75
|
+
path.values.first, method: path.keys.first
|
76
|
+
)
|
77
|
+
end
|
78
|
+
end
|
70
79
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
@routing_options = @scope.routes.recognize_path(
|
75
|
-
path.values.first, :method => path.keys.first
|
76
|
-
)
|
77
|
-
end
|
78
|
-
end
|
80
|
+
def failure_message
|
81
|
+
"expected #{@actual.inspect} to be routable"
|
82
|
+
end
|
79
83
|
|
80
|
-
|
81
|
-
|
82
|
-
|
84
|
+
def failure_message_when_negated
|
85
|
+
"expected #{@actual.inspect} not to be routable, but it routes to #{@routing_options.inspect}"
|
86
|
+
end
|
83
87
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
+
def description
|
89
|
+
"be routable"
|
90
|
+
end
|
91
|
+
end
|
88
92
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
93
|
+
# Passes if the route expression is recognized by the Rails router based on
|
94
|
+
# the declarations in `config/routes.rb`. Delegates to
|
95
|
+
# `RouteSet#recognize_path`.
|
96
|
+
#
|
97
|
+
# @example You can use route helpers provided by rspec-rails.
|
98
|
+
# expect(get: "/a/path").to be_routable
|
99
|
+
# expect(post: "/another/path").to be_routable
|
100
|
+
# expect(put: "/yet/another/path").to be_routable
|
101
|
+
def be_routable
|
102
|
+
BeRoutableMatcher.new(self)
|
103
|
+
end
|
100
104
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
105
|
+
# Helpers for matching different route types.
|
106
|
+
module RouteHelpers
|
107
|
+
# @!method get
|
108
|
+
# @!method post
|
109
|
+
# @!method put
|
110
|
+
# @!method patch
|
111
|
+
# @!method delete
|
112
|
+
# @!method options
|
113
|
+
# @!method head
|
114
|
+
#
|
115
|
+
# Shorthand method for matching this type of route.
|
116
|
+
%w[get post put patch delete options head].each do |method|
|
117
|
+
define_method method do |path|
|
118
|
+
{method.to_sym => path}
|
119
|
+
end
|
120
|
+
end
|
115
121
|
end
|
116
122
|
end
|
117
123
|
end
|
data/lib/rspec/rails/matchers.rb
CHANGED
@@ -1,22 +1,17 @@
|
|
1
1
|
require 'rspec/core/warnings'
|
2
2
|
require 'rspec/expectations'
|
3
|
+
require 'rspec/rails/feature_check'
|
3
4
|
|
4
|
-
module RSpec
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
begin
|
10
|
-
require 'test/unit/assertionfailederror'
|
11
|
-
rescue LoadError
|
12
|
-
module Test
|
13
|
-
module Unit
|
14
|
-
class AssertionFailedError < StandardError
|
15
|
-
end
|
5
|
+
module RSpec
|
6
|
+
module Rails
|
7
|
+
# @api public
|
8
|
+
# Container module for Rails specific matchers.
|
9
|
+
module Matchers
|
16
10
|
end
|
17
11
|
end
|
18
12
|
end
|
19
13
|
|
14
|
+
require 'rspec/rails/matchers/base_matcher'
|
20
15
|
require 'rspec/rails/matchers/have_rendered'
|
21
16
|
require 'rspec/rails/matchers/redirect_to'
|
22
17
|
require 'rspec/rails/matchers/routing_matchers'
|
@@ -25,3 +20,16 @@ require 'rspec/rails/matchers/be_a_new'
|
|
25
20
|
require 'rspec/rails/matchers/relation_match_array'
|
26
21
|
require 'rspec/rails/matchers/be_valid'
|
27
22
|
require 'rspec/rails/matchers/have_http_status'
|
23
|
+
|
24
|
+
if RSpec::Rails::FeatureCheck.has_active_job?
|
25
|
+
require 'rspec/rails/matchers/active_job'
|
26
|
+
require 'rspec/rails/matchers/have_enqueued_mail'
|
27
|
+
end
|
28
|
+
|
29
|
+
if RSpec::Rails::FeatureCheck.has_action_cable_testing?
|
30
|
+
require 'rspec/rails/matchers/action_cable'
|
31
|
+
end
|
32
|
+
|
33
|
+
if RSpec::Rails::FeatureCheck.has_action_mailbox?
|
34
|
+
require 'rspec/rails/matchers/action_mailbox'
|
35
|
+
end
|
@@ -3,19 +3,19 @@ if default = Rake.application.instance_variable_get('@tasks')['default']
|
|
3
3
|
default.prerequisites.delete('test')
|
4
4
|
end
|
5
5
|
|
6
|
-
task :
|
6
|
+
task default: :spec
|
7
7
|
|
8
|
-
task :
|
8
|
+
task stats: "spec:statsetup"
|
9
9
|
|
10
10
|
desc "Run all specs in spec directory (excluding plugin specs)"
|
11
|
-
RSpec::Core::RakeTask.new(:
|
11
|
+
RSpec::Core::RakeTask.new(spec: "spec:prepare")
|
12
12
|
|
13
13
|
namespace :spec do
|
14
14
|
types = begin
|
15
|
-
dirs = Dir['./spec/**/*_spec.rb']
|
16
|
-
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }
|
17
|
-
uniq
|
18
|
-
select { |f| File.directory?(f) }
|
15
|
+
dirs = Dir['./spec/**/*_spec.rb']
|
16
|
+
.map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }
|
17
|
+
.uniq
|
18
|
+
.select { |f| File.directory?(f) }
|
19
19
|
Hash[dirs.map { |d| [d.split('/').last, d] }]
|
20
20
|
end
|
21
21
|
|
@@ -35,16 +35,6 @@ namespace :spec do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
# RCov task only enabled for Ruby 1.8
|
39
|
-
if RUBY_VERSION < '1.9'
|
40
|
-
desc "Run all specs with rcov"
|
41
|
-
RSpec::Core::RakeTask.new(:rcov => "spec:prepare") do |t|
|
42
|
-
t.rcov = true
|
43
|
-
t.pattern = "./spec/**/*_spec.rb"
|
44
|
-
t.rcov_opts = '--exclude /gems/,/Library/,/usr/,lib/tasks,.bundle,config,/lib/rspec/,/lib/rspec-,spec'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
38
|
task :statsetup do
|
49
39
|
require 'rails/code_statistics'
|
50
40
|
types.each do |type, dir|
|
@@ -9,25 +9,26 @@ rescue LoadError
|
|
9
9
|
end
|
10
10
|
|
11
11
|
if defined?(Capybara)
|
12
|
-
require 'rspec/support/version_checker'
|
13
|
-
RSpec::Support::VersionChecker.new('capybara', Capybara::VERSION, '2.2.0').check_version!
|
14
|
-
|
15
12
|
RSpec.configure do |c|
|
16
13
|
if defined?(Capybara::DSL)
|
17
|
-
c.include Capybara::DSL, :
|
14
|
+
c.include Capybara::DSL, type: :feature
|
15
|
+
if defined?(ActionPack) && ActionPack::VERSION::STRING >= "5.1"
|
16
|
+
c.include Capybara::DSL, type: :system
|
17
|
+
end
|
18
18
|
end
|
19
19
|
|
20
20
|
if defined?(Capybara::RSpecMatchers)
|
21
|
-
c.include Capybara::RSpecMatchers, :
|
22
|
-
c.include Capybara::RSpecMatchers, :
|
23
|
-
c.include Capybara::RSpecMatchers, :
|
24
|
-
c.include Capybara::RSpecMatchers, :
|
25
|
-
c.include Capybara::RSpecMatchers, :
|
21
|
+
c.include Capybara::RSpecMatchers, type: :view
|
22
|
+
c.include Capybara::RSpecMatchers, type: :helper
|
23
|
+
c.include Capybara::RSpecMatchers, type: :mailer
|
24
|
+
c.include Capybara::RSpecMatchers, type: :controller
|
25
|
+
c.include Capybara::RSpecMatchers, type: :feature
|
26
|
+
c.include Capybara::RSpecMatchers, type: :system
|
26
27
|
end
|
27
28
|
|
28
29
|
unless defined?(Capybara::RSpecMatchers) || defined?(Capybara::DSL)
|
29
|
-
c.include Capybara, :
|
30
|
-
c.include Capybara, :
|
30
|
+
c.include Capybara, type: :request
|
31
|
+
c.include Capybara, type: :controller
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
data/lib/rspec/rails/version.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Rails
|
3
|
+
# Builds paths for view specs using a particular route set.
|
4
|
+
class ViewPathBuilder
|
5
|
+
def initialize(route_set)
|
6
|
+
self.class.send(:include, route_set.url_helpers)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Given a hash of parameters, build a view path, if possible.
|
10
|
+
# Returns nil if no path can be built from the given params.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # path can be built because all required params are present in the hash
|
14
|
+
# view_path_builder = ViewPathBuilder.new(::Rails.application.routes)
|
15
|
+
# view_path_builder.path_for({ :controller => 'posts', :action => 'show', :id => '54' })
|
16
|
+
# # => "/post/54"
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# # path cannot be built because the params are missing a required element (:id)
|
20
|
+
# view_path_builder.path_for({ :controller => 'posts', :action => 'delete' })
|
21
|
+
# # => ActionController::UrlGenerationError: No route matches {:action=>"delete", :controller=>"posts"}
|
22
|
+
def path_for(path_params)
|
23
|
+
url_for(path_params.merge(only_path: true))
|
24
|
+
rescue => e
|
25
|
+
e.message
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|