rspec-rails 3.0.2 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Changelog.md +17 -0
- data/README.md +7 -7
- data/lib/generators/rspec.rb +10 -6
- data/lib/generators/rspec/controller/templates/controller_spec.rb +1 -1
- data/lib/generators/rspec/install/install_generator.rb +19 -2
- data/lib/generators/rspec/install/templates/spec/rails_helper.rb +13 -4
- data/lib/generators/rspec/integration/templates/request_spec.rb +1 -1
- data/lib/generators/rspec/job/job_generator.rb +12 -0
- data/lib/generators/rspec/job/templates/job_spec.rb.erb +7 -0
- data/lib/generators/rspec/model/model_generator.rb +18 -5
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +107 -100
- data/lib/rspec-rails.rb +1 -1
- data/lib/rspec/rails.rb +1 -0
- data/lib/rspec/rails/adapters.rb +9 -7
- data/lib/rspec/rails/configuration.rb +2 -3
- data/lib/rspec/rails/example/controller_example_group.rb +172 -149
- data/lib/rspec/rails/example/feature_example_group.rb +25 -23
- data/lib/rspec/rails/example/helper_example_group.rb +27 -25
- data/lib/rspec/rails/example/mailer_example_group.rb +26 -22
- data/lib/rspec/rails/example/model_example_group.rb +8 -6
- data/lib/rspec/rails/example/request_example_group.rb +19 -17
- data/lib/rspec/rails/example/routing_example_group.rb +40 -38
- data/lib/rspec/rails/example/view_example_group.rb +140 -137
- data/lib/rspec/rails/extensions/active_record/proxy.rb +0 -1
- data/lib/rspec/rails/feature_check.rb +35 -0
- data/lib/rspec/rails/fixture_support.rb +1 -1
- data/lib/rspec/rails/matchers.rb +5 -2
- data/lib/rspec/rails/matchers/be_a_new.rb +68 -64
- data/lib/rspec/rails/matchers/be_new_record.rb +24 -20
- data/lib/rspec/rails/matchers/be_valid.rb +38 -34
- data/lib/rspec/rails/matchers/have_http_status.rb +340 -334
- data/lib/rspec/rails/matchers/have_rendered.rb +35 -32
- data/lib/rspec/rails/matchers/redirect_to.rb +30 -27
- data/lib/rspec/rails/matchers/routing_matchers.rb +103 -101
- data/lib/rspec/rails/version.rb +1 -1
- data/lib/rspec/rails/view_assigns.rb +1 -2
- data/lib/rspec/rails/view_rendering.rb +6 -8
- metadata +16 -13
- metadata.gz.sig +3 -2
@@ -1,41 +1,44 @@
|
|
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::Matchers::BuiltIn::BaseMatcher
|
8
|
+
def initialize(scope, expected, message = nil)
|
9
|
+
@expected = Symbol === expected ? expected.to_s : expected
|
10
|
+
@message = message
|
11
|
+
@scope = scope
|
12
|
+
end
|
6
13
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
14
|
+
# @api private
|
15
|
+
def matches?(*)
|
16
|
+
match_unless_raises ActiveSupport::TestCase::Assertion do
|
17
|
+
@scope.assert_template expected, @message
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# @api private
|
22
|
+
def failure_message
|
23
|
+
rescued_exception.message
|
24
|
+
end
|
12
25
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
26
|
+
# @api private
|
27
|
+
def failure_message_when_negated
|
28
|
+
"expected not to render #{expected.inspect}, but did"
|
29
|
+
end
|
17
30
|
end
|
18
|
-
end
|
19
31
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
32
|
+
# Delegates to `assert_template`.
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# expect(response).to have_rendered("new")
|
36
|
+
def have_rendered(options, message = nil)
|
37
|
+
RenderTemplateMatcher.new(self, options, message)
|
38
|
+
end
|
24
39
|
|
25
|
-
|
26
|
-
def failure_message_when_negated
|
27
|
-
"expected not to render #{expected.inspect}, but did"
|
40
|
+
alias_method :render_template, :have_rendered
|
28
41
|
end
|
29
42
|
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
43
|
end
|
41
44
|
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::Matchers::BuiltIn::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,117 +1,119 @@
|
|
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::Matchers::BuiltIn::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 = 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
|
-
|
43
|
+
def description
|
44
|
+
"route #{@actual.inspect} to #{@expected.inspect}"
|
45
|
+
end
|
46
|
+
end
|
41
47
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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 http://api.rubyonrails.org/classes/ActionDispatch/Assertions/RoutingAssertions.html#method-i-assert_recognizes
|
61
|
+
def route_to(*expected)
|
62
|
+
RouteToMatcher.new(self, *expected)
|
63
|
+
end
|
46
64
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
# expect(:get => "/things/special").to route_to(
|
53
|
-
# :controller => "things",
|
54
|
-
# :action => "special"
|
55
|
-
# )
|
56
|
-
#
|
57
|
-
# expect(:get => "/things/special").to route_to("things#special")
|
58
|
-
#
|
59
|
-
# @see http://api.rubyonrails.org/classes/ActionDispatch/Assertions/RoutingAssertions.html#method-i-assert_recognizes
|
60
|
-
def route_to(*expected)
|
61
|
-
RouteToMatcher.new(self, *expected)
|
62
|
-
end
|
65
|
+
# @private
|
66
|
+
class BeRoutableMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
|
67
|
+
def initialize(scope)
|
68
|
+
@scope = scope
|
69
|
+
end
|
63
70
|
|
64
|
-
|
65
|
-
|
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
|
66
79
|
|
67
|
-
|
68
|
-
|
69
|
-
|
80
|
+
def failure_message
|
81
|
+
"expected #{@actual.inspect} to be routable"
|
82
|
+
end
|
70
83
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
@routing_options = @scope.routes.recognize_path(
|
75
|
-
path.values.first, :method => path.keys.first
|
76
|
-
)
|
84
|
+
def failure_message_when_negated
|
85
|
+
"expected #{@actual.inspect} not to be routable, but it routes to #{@routing_options.inspect}"
|
86
|
+
end
|
77
87
|
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def failure_message
|
81
|
-
"expected #{@actual.inspect} to be routable"
|
82
|
-
end
|
83
88
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
# expect(:post => "/another/path").to be_routable
|
96
|
-
# expect(:put => "/yet/another/path").to be_routable
|
97
|
-
def be_routable
|
98
|
-
BeRoutableMatcher.new(self)
|
99
|
-
end
|
89
|
+
# Passes if the route expression is recognized by the Rails router based on
|
90
|
+
# the declarations in `config/routes.rb`. Delegates to
|
91
|
+
# `RouteSet#recognize_path`.
|
92
|
+
#
|
93
|
+
# @example You can use route helpers provided by rspec-rails.
|
94
|
+
# expect(:get => "/a/path").to be_routable
|
95
|
+
# expect(:post => "/another/path").to be_routable
|
96
|
+
# expect(:put => "/yet/another/path").to be_routable
|
97
|
+
def be_routable
|
98
|
+
BeRoutableMatcher.new(self)
|
99
|
+
end
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
101
|
+
# Helpers for matching different route types.
|
102
|
+
module RouteHelpers
|
103
|
+
# @!method get
|
104
|
+
# @!method post
|
105
|
+
# @!method put
|
106
|
+
# @!method patch
|
107
|
+
# @!method delete
|
108
|
+
# @!method options
|
109
|
+
# @!method head
|
110
|
+
#
|
111
|
+
# Shorthand method for matching this type of route.
|
112
|
+
%w[get post put patch delete options head].each do |method|
|
113
|
+
define_method method do |path|
|
114
|
+
{ method.to_sym => path }
|
115
|
+
end
|
116
|
+
end
|
115
117
|
end
|
116
118
|
end
|
117
119
|
end
|
data/lib/rspec/rails/version.rb
CHANGED
@@ -11,7 +11,7 @@ module RSpec
|
|
11
11
|
# DSL methods
|
12
12
|
module ClassMethods
|
13
13
|
# @see RSpec::Rails::ControllerExampleGroup
|
14
|
-
def render_views(true_or_false=true)
|
14
|
+
def render_views(true_or_false = true)
|
15
15
|
@render_views = true_or_false
|
16
16
|
end
|
17
17
|
|
@@ -44,15 +44,13 @@ module RSpec
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def find_all(*args)
|
47
|
-
original_path_set.find_all(*args).
|
47
|
+
original_path_set.find_all(*args).map do |template|
|
48
48
|
::ActionView::Template.new(
|
49
49
|
"",
|
50
50
|
template.identifier,
|
51
51
|
EmptyTemplateHandler,
|
52
|
-
|
53
|
-
|
54
|
-
:format => template.formats
|
55
|
-
}
|
52
|
+
:virtual_path => template.virtual_path,
|
53
|
+
:format => template.formats
|
56
54
|
)
|
57
55
|
end
|
58
56
|
end
|
@@ -60,7 +58,7 @@ module RSpec
|
|
60
58
|
|
61
59
|
# @private
|
62
60
|
class EmptyTemplateHandler
|
63
|
-
def self.call(
|
61
|
+
def self.call(_template)
|
64
62
|
%("")
|
65
63
|
end
|
66
64
|
end
|
@@ -77,7 +75,7 @@ module RSpec
|
|
77
75
|
lookup_context.view_paths.push(*_path_decorator(new_path))
|
78
76
|
end
|
79
77
|
|
80
|
-
|
78
|
+
private
|
81
79
|
|
82
80
|
def _path_decorator(path)
|
83
81
|
EmptyTemplatePathSetDecorator.new(ActionView::PathSet.new(Array.wrap(path)))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chelimsky
|
@@ -32,7 +32,7 @@ cert_chain:
|
|
32
32
|
1yHC1AcSYpvi2dAbOiHT5iQF+krm4wse8KctXgTNnjMsHEoGKulJS2/sZl90jcCz
|
33
33
|
muA=
|
34
34
|
-----END CERTIFICATE-----
|
35
|
-
date: 2014-
|
35
|
+
date: 2014-09-05 00:00:00.000000000 Z
|
36
36
|
dependencies:
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: activesupport
|
@@ -82,56 +82,56 @@ dependencies:
|
|
82
82
|
requirements:
|
83
83
|
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version: 3.
|
85
|
+
version: 3.1.0
|
86
86
|
type: :runtime
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
90
|
- - "~>"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: 3.
|
92
|
+
version: 3.1.0
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: rspec-expectations
|
95
95
|
requirement: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: 3.
|
99
|
+
version: 3.1.0
|
100
100
|
type: :runtime
|
101
101
|
prerelease: false
|
102
102
|
version_requirements: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
104
|
- - "~>"
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: 3.
|
106
|
+
version: 3.1.0
|
107
107
|
- !ruby/object:Gem::Dependency
|
108
108
|
name: rspec-mocks
|
109
109
|
requirement: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
111
|
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version: 3.
|
113
|
+
version: 3.1.0
|
114
114
|
type: :runtime
|
115
115
|
prerelease: false
|
116
116
|
version_requirements: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
118
|
- - "~>"
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 3.
|
120
|
+
version: 3.1.0
|
121
121
|
- !ruby/object:Gem::Dependency
|
122
122
|
name: rspec-support
|
123
123
|
requirement: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
125
|
- - "~>"
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: 3.
|
127
|
+
version: 3.1.0
|
128
128
|
type: :runtime
|
129
129
|
prerelease: false
|
130
130
|
version_requirements: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
132
|
- - "~>"
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version: 3.
|
134
|
+
version: 3.1.0
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rake
|
137
137
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,14 +180,14 @@ dependencies:
|
|
180
180
|
requirements:
|
181
181
|
- - '='
|
182
182
|
- !ruby/object:Gem::Version
|
183
|
-
version: 1.
|
183
|
+
version: 1.1.2
|
184
184
|
type: :development
|
185
185
|
prerelease: false
|
186
186
|
version_requirements: !ruby/object:Gem::Requirement
|
187
187
|
requirements:
|
188
188
|
- - '='
|
189
189
|
- !ruby/object:Gem::Version
|
190
|
-
version: 1.
|
190
|
+
version: 1.1.2
|
191
191
|
description: RSpec for Rails
|
192
192
|
email: rspec@googlegroups.com
|
193
193
|
executables: []
|
@@ -212,6 +212,8 @@ files:
|
|
212
212
|
- lib/generators/rspec/install/templates/spec/rails_helper.rb
|
213
213
|
- lib/generators/rspec/integration/integration_generator.rb
|
214
214
|
- lib/generators/rspec/integration/templates/request_spec.rb
|
215
|
+
- lib/generators/rspec/job/job_generator.rb
|
216
|
+
- lib/generators/rspec/job/templates/job_spec.rb.erb
|
215
217
|
- lib/generators/rspec/mailer/mailer_generator.rb
|
216
218
|
- lib/generators/rspec/mailer/templates/fixture
|
217
219
|
- lib/generators/rspec/mailer/templates/mailer_spec.rb
|
@@ -245,6 +247,7 @@ files:
|
|
245
247
|
- lib/rspec/rails/example/view_example_group.rb
|
246
248
|
- lib/rspec/rails/extensions.rb
|
247
249
|
- lib/rspec/rails/extensions/active_record/proxy.rb
|
250
|
+
- lib/rspec/rails/feature_check.rb
|
248
251
|
- lib/rspec/rails/fixture_support.rb
|
249
252
|
- lib/rspec/rails/matchers.rb
|
250
253
|
- lib/rspec/rails/matchers/be_a_new.rb
|
@@ -284,6 +287,6 @@ rubyforge_project: rspec
|
|
284
287
|
rubygems_version: 2.2.2
|
285
288
|
signing_key:
|
286
289
|
specification_version: 4
|
287
|
-
summary: rspec-rails-3.0
|
290
|
+
summary: rspec-rails-3.1.0
|
288
291
|
test_files: []
|
289
292
|
has_rdoc:
|