rspec-rails 4.0.1 → 5.1.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Changelog.md +91 -2
- data/README.md +41 -32
- data/lib/generators/rspec/controller/controller_generator.rb +2 -2
- data/lib/generators/rspec/controller/templates/request_spec.rb +6 -1
- data/lib/generators/rspec/install/templates/spec/rails_helper.rb +1 -1
- data/lib/generators/rspec/job/job_generator.rb +2 -1
- data/lib/generators/rspec/job/templates/job_spec.rb.erb +1 -1
- data/lib/generators/rspec/mailer/templates/mailer_spec.rb +2 -2
- data/lib/generators/rspec/mailer/templates/preview.rb +1 -1
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +4 -0
- data/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +13 -13
- data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +20 -20
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +10 -58
- data/lib/generators/rspec/scaffold/templates/edit_spec.rb +0 -4
- data/lib/generators/rspec/scaffold/templates/new_spec.rb +0 -4
- data/lib/generators/rspec/scaffold/templates/request_spec.rb +23 -18
- data/lib/generators/rspec/system/system_generator.rb +14 -16
- data/lib/rspec/rails/configuration.rb +40 -6
- data/lib/rspec/rails/example/controller_example_group.rb +1 -0
- data/lib/rspec/rails/example/mailbox_example_group.rb +1 -1
- data/lib/rspec/rails/example/request_example_group.rb +1 -4
- data/lib/rspec/rails/example/system_example_group.rb +3 -2
- data/lib/rspec/rails/extensions/active_record/proxy.rb +4 -1
- data/lib/rspec/rails/file_fixture_support.rb +9 -11
- data/lib/rspec/rails/fixture_file_upload_support.rb +32 -16
- data/lib/rspec/rails/fixture_support.rb +9 -12
- data/lib/rspec/rails/matchers/action_mailbox.rb +14 -5
- data/lib/rspec/rails/matchers/active_job.rb +23 -1
- data/lib/rspec/rails/matchers/have_enqueued_mail.rb +30 -2
- data/lib/rspec/rails/matchers/have_http_status.rb +4 -4
- data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
- data/lib/rspec/rails/version.rb +1 -1
- data/lib/rspec-rails.rb +5 -7
- data.tar.gz.sig +0 -0
- metadata +39 -27
- metadata.gz.sig +0 -0
@@ -46,11 +46,7 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
|
|
46
46
|
describe "GET #index" do
|
47
47
|
it "returns a success response" do
|
48
48
|
<%= class_name %>.create! valid_attributes
|
49
|
-
<% if Rails::VERSION::STRING < '5.0' -%>
|
50
|
-
get :index, {}, valid_session
|
51
|
-
<% else -%>
|
52
49
|
get :index, params: {}, session: valid_session
|
53
|
-
<% end -%>
|
54
50
|
expect(response).to be_successful
|
55
51
|
end
|
56
52
|
end
|
@@ -59,22 +55,14 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
|
|
59
55
|
describe "GET #show" do
|
60
56
|
it "returns a success response" do
|
61
57
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
62
|
-
<% if Rails::VERSION::STRING < '5.0' -%>
|
63
|
-
get :show, {id: <%= file_name %>.to_param}, valid_session
|
64
|
-
<% else -%>
|
65
58
|
get :show, params: {id: <%= file_name %>.to_param}, session: valid_session
|
66
|
-
<% end -%>
|
67
59
|
expect(response).to be_successful
|
68
60
|
end
|
69
61
|
end
|
70
62
|
|
71
63
|
describe "GET #new" do
|
72
64
|
it "returns a success response" do
|
73
|
-
<% if Rails::VERSION::STRING < '5.0' -%>
|
74
|
-
get :new, {}, valid_session
|
75
|
-
<% else -%>
|
76
65
|
get :new, params: {}, session: valid_session
|
77
|
-
<% end -%>
|
78
66
|
expect(response).to be_successful
|
79
67
|
end
|
80
68
|
end
|
@@ -82,11 +70,7 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
|
|
82
70
|
describe "GET #edit" do
|
83
71
|
it "returns a success response" do
|
84
72
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
85
|
-
<% if Rails::VERSION::STRING < '5.0' -%>
|
86
|
-
get :edit, {id: <%= file_name %>.to_param}, valid_session
|
87
|
-
<% else -%>
|
88
73
|
get :edit, params: {id: <%= file_name %>.to_param}, session: valid_session
|
89
|
-
<% end -%>
|
90
74
|
expect(response).to be_successful
|
91
75
|
end
|
92
76
|
end
|
@@ -95,31 +79,19 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
|
|
95
79
|
context "with valid params" do
|
96
80
|
it "creates a new <%= class_name %>" do
|
97
81
|
expect {
|
98
|
-
|
99
|
-
post :create, {<%= ns_file_name %>: valid_attributes}, valid_session
|
100
|
-
<% else -%>
|
101
|
-
post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
|
102
|
-
<% end -%>
|
82
|
+
post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
|
103
83
|
}.to change(<%= class_name %>, :count).by(1)
|
104
84
|
end
|
105
85
|
|
106
|
-
it "redirects to the created <%=
|
107
|
-
|
108
|
-
post :create, {<%= ns_file_name %>: valid_attributes}, valid_session
|
109
|
-
<% else -%>
|
110
|
-
post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
|
111
|
-
<% end -%>
|
86
|
+
it "redirects to the created <%= singular_table_name %>" do
|
87
|
+
post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
|
112
88
|
expect(response).to redirect_to(<%= class_name %>.last)
|
113
89
|
end
|
114
90
|
end
|
115
91
|
|
116
92
|
context "with invalid params" do
|
117
93
|
it "returns a success response (i.e. to display the 'new' template)" do
|
118
|
-
|
119
|
-
post :create, {<%= ns_file_name %>: invalid_attributes}, valid_session
|
120
|
-
<% else -%>
|
121
|
-
post :create, params: {<%= ns_file_name %>: invalid_attributes}, session: valid_session
|
122
|
-
<% end -%>
|
94
|
+
post :create, params: {<%= singular_table_name %>: invalid_attributes}, session: valid_session
|
123
95
|
expect(response).to be_successful
|
124
96
|
end
|
125
97
|
end
|
@@ -131,24 +103,16 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
|
|
131
103
|
skip("Add a hash of attributes valid for your model")
|
132
104
|
}
|
133
105
|
|
134
|
-
it "updates the requested <%=
|
106
|
+
it "updates the requested <%= singular_table_name %>" do
|
135
107
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
136
|
-
|
137
|
-
put :update, {id: <%= file_name %>.to_param, <%= ns_file_name %>: new_attributes}, valid_session
|
138
|
-
<% else -%>
|
139
|
-
put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: new_attributes}, session: valid_session
|
140
|
-
<% end -%>
|
108
|
+
put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: new_attributes}, session: valid_session
|
141
109
|
<%= file_name %>.reload
|
142
110
|
skip("Add assertions for updated state")
|
143
111
|
end
|
144
112
|
|
145
|
-
it "redirects to the <%=
|
113
|
+
it "redirects to the <%= singular_table_name %>" do
|
146
114
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
147
|
-
|
148
|
-
put :update, {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, valid_session
|
149
|
-
<% else -%>
|
150
|
-
put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, session: valid_session
|
151
|
-
<% end -%>
|
115
|
+
put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: valid_attributes}, session: valid_session
|
152
116
|
expect(response).to redirect_to(<%= file_name %>)
|
153
117
|
end
|
154
118
|
end
|
@@ -156,35 +120,23 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
|
|
156
120
|
context "with invalid params" do
|
157
121
|
it "returns a success response (i.e. to display the 'edit' template)" do
|
158
122
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
159
|
-
|
160
|
-
put :update, {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, valid_session
|
161
|
-
<% else -%>
|
162
|
-
put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, session: valid_session
|
163
|
-
<% end -%>
|
123
|
+
put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: invalid_attributes}, session: valid_session
|
164
124
|
expect(response).to be_successful
|
165
125
|
end
|
166
126
|
end
|
167
127
|
end
|
168
128
|
|
169
129
|
describe "DELETE #destroy" do
|
170
|
-
it "destroys the requested <%=
|
130
|
+
it "destroys the requested <%= singular_table_name %>" do
|
171
131
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
172
132
|
expect {
|
173
|
-
<% if Rails::VERSION::STRING < '5.0' -%>
|
174
|
-
delete :destroy, {id: <%= file_name %>.to_param}, valid_session
|
175
|
-
<% else -%>
|
176
133
|
delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
|
177
|
-
<% end -%>
|
178
134
|
}.to change(<%= class_name %>, :count).by(-1)
|
179
135
|
end
|
180
136
|
|
181
137
|
it "redirects to the <%= table_name %> list" do
|
182
138
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
183
|
-
<% if Rails::VERSION::STRING < '5.0' -%>
|
184
|
-
delete :destroy, {id: <%= file_name %>.to_param}, valid_session
|
185
|
-
<% else -%>
|
186
139
|
delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
|
187
|
-
<% end -%>
|
188
140
|
expect(response).to redirect_to(<%= index_helper %>_url)
|
189
141
|
end
|
190
142
|
end
|
@@ -16,11 +16,7 @@ RSpec.describe "<%= ns_table_name %>/edit", <%= type_metatag(:view) %> do
|
|
16
16
|
assert_select "form[action=?][method=?]", <%= ns_file_name %>_path(@<%= ns_file_name %>), "post" do
|
17
17
|
<% for attribute in output_attributes -%>
|
18
18
|
<%- name = attribute.respond_to?(:column_name) ? attribute.column_name : attribute.name %>
|
19
|
-
<% if Rails.version.to_f >= 5.1 -%>
|
20
19
|
assert_select "<%= attribute.input_type -%>[name=?]", "<%= ns_file_name %>[<%= name %>]"
|
21
|
-
<% else -%>
|
22
|
-
assert_select "<%= attribute.input_type -%>#<%= ns_file_name %>_<%= name %>[name=?]", "<%= ns_file_name %>[<%= name %>]"
|
23
|
-
<% end -%>
|
24
20
|
<% end -%>
|
25
21
|
end
|
26
22
|
end
|
@@ -15,11 +15,7 @@ RSpec.describe "<%= ns_table_name %>/new", <%= type_metatag(:view) %> do
|
|
15
15
|
assert_select "form[action=?][method=?]", <%= index_helper %>_path, "post" do
|
16
16
|
<% for attribute in output_attributes -%>
|
17
17
|
<%- name = attribute.respond_to?(:column_name) ? attribute.column_name : attribute.name %>
|
18
|
-
<% if Rails.version.to_f >= 5.1 -%>
|
19
18
|
assert_select "<%= attribute.input_type -%>[name=?]", "<%= ns_file_name %>[<%= name %>]"
|
20
|
-
<% else -%>
|
21
|
-
assert_select "<%= attribute.input_type -%>#<%= ns_file_name %>_<%= name %>[name=?]", "<%= ns_file_name %>[<%= name %>]"
|
22
|
-
<% end -%>
|
23
19
|
<% end -%>
|
24
20
|
end
|
25
21
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'rails_helper'
|
2
2
|
|
3
3
|
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
4
4
|
# It demonstrates how one might use RSpec to test the controller code that
|
@@ -14,6 +14,11 @@
|
|
14
14
|
|
15
15
|
<% module_namespacing do -%>
|
16
16
|
RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %> do
|
17
|
+
<% if mountable_engine? -%>
|
18
|
+
include Engine.routes.url_helpers
|
19
|
+
<% end -%>
|
20
|
+
|
21
|
+
# This should return the minimal set of attributes required to create a valid
|
17
22
|
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to
|
18
23
|
# adjust the attributes here as well.
|
19
24
|
let(:valid_attributes) {
|
@@ -37,7 +42,7 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
|
|
37
42
|
describe "GET /show" do
|
38
43
|
it "renders a successful response" do
|
39
44
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
40
|
-
get <%= show_helper
|
45
|
+
get <%= show_helper %>
|
41
46
|
expect(response).to be_successful
|
42
47
|
end
|
43
48
|
end
|
@@ -50,9 +55,9 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
|
|
50
55
|
end
|
51
56
|
|
52
57
|
describe "GET /edit" do
|
53
|
-
it "
|
58
|
+
it "renders a successful response" do
|
54
59
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
55
|
-
get <%= edit_helper
|
60
|
+
get <%= edit_helper %>
|
56
61
|
expect(response).to be_successful
|
57
62
|
end
|
58
63
|
end
|
@@ -61,25 +66,25 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
|
|
61
66
|
context "with valid parameters" do
|
62
67
|
it "creates a new <%= class_name %>" do
|
63
68
|
expect {
|
64
|
-
post <%= index_helper %>_url, params: { <%=
|
69
|
+
post <%= index_helper %>_url, params: { <%= singular_table_name %>: valid_attributes }
|
65
70
|
}.to change(<%= class_name %>, :count).by(1)
|
66
71
|
end
|
67
72
|
|
68
|
-
it "redirects to the created <%=
|
69
|
-
post <%= index_helper %>_url, params: { <%=
|
70
|
-
expect(response).to redirect_to(<%= show_helper
|
73
|
+
it "redirects to the created <%= singular_table_name %>" do
|
74
|
+
post <%= index_helper %>_url, params: { <%= singular_table_name %>: valid_attributes }
|
75
|
+
expect(response).to redirect_to(<%= show_helper(class_name+".last") %>)
|
71
76
|
end
|
72
77
|
end
|
73
78
|
|
74
79
|
context "with invalid parameters" do
|
75
80
|
it "does not create a new <%= class_name %>" do
|
76
81
|
expect {
|
77
|
-
post <%= index_helper %>_url, params: { <%=
|
82
|
+
post <%= index_helper %>_url, params: { <%= singular_table_name %>: invalid_attributes }
|
78
83
|
}.to change(<%= class_name %>, :count).by(0)
|
79
84
|
end
|
80
85
|
|
81
86
|
it "renders a successful response (i.e. to display the 'new' template)" do
|
82
|
-
post <%= index_helper %>_url, params: { <%=
|
87
|
+
post <%= index_helper %>_url, params: { <%= singular_table_name %>: invalid_attributes }
|
83
88
|
expect(response).to be_successful
|
84
89
|
end
|
85
90
|
end
|
@@ -91,16 +96,16 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
|
|
91
96
|
skip("Add a hash of attributes valid for your model")
|
92
97
|
}
|
93
98
|
|
94
|
-
it "updates the requested <%=
|
99
|
+
it "updates the requested <%= singular_table_name %>" do
|
95
100
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
96
|
-
patch <%= show_helper
|
101
|
+
patch <%= show_helper %>, params: { <%= singular_table_name %>: new_attributes }
|
97
102
|
<%= file_name %>.reload
|
98
103
|
skip("Add assertions for updated state")
|
99
104
|
end
|
100
105
|
|
101
|
-
it "redirects to the <%=
|
106
|
+
it "redirects to the <%= singular_table_name %>" do
|
102
107
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
103
|
-
patch <%= show_helper
|
108
|
+
patch <%= show_helper %>, params: { <%= singular_table_name %>: new_attributes }
|
104
109
|
<%= file_name %>.reload
|
105
110
|
expect(response).to redirect_to(<%= singular_table_name %>_url(<%= file_name %>))
|
106
111
|
end
|
@@ -109,23 +114,23 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
|
|
109
114
|
context "with invalid parameters" do
|
110
115
|
it "renders a successful response (i.e. to display the 'edit' template)" do
|
111
116
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
112
|
-
patch <%= show_helper
|
117
|
+
patch <%= show_helper %>, params: { <%= singular_table_name %>: invalid_attributes }
|
113
118
|
expect(response).to be_successful
|
114
119
|
end
|
115
120
|
end
|
116
121
|
end
|
117
122
|
|
118
123
|
describe "DELETE /destroy" do
|
119
|
-
it "destroys the requested <%=
|
124
|
+
it "destroys the requested <%= singular_table_name %>" do
|
120
125
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
121
126
|
expect {
|
122
|
-
delete <%= show_helper
|
127
|
+
delete <%= show_helper %>
|
123
128
|
}.to change(<%= class_name %>, :count).by(-1)
|
124
129
|
end
|
125
130
|
|
126
131
|
it "redirects to the <%= table_name %> list" do
|
127
132
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
128
|
-
delete <%= show_helper
|
133
|
+
delete <%= show_helper %>
|
129
134
|
expect(response).to redirect_to(<%= index_helper %>_url)
|
130
135
|
end
|
131
136
|
end
|
@@ -1,25 +1,23 @@
|
|
1
1
|
require 'generators/rspec'
|
2
2
|
|
3
|
-
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
class_option :system_specs, type: :boolean, default: true, desc: "Generate system specs"
|
3
|
+
module Rspec
|
4
|
+
module Generators
|
5
|
+
# @private
|
6
|
+
class SystemGenerator < Base
|
7
|
+
class_option :system_specs, type: :boolean, default: true, desc: "Generate system specs"
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
def generate_system_spec
|
10
|
+
return unless options[:system_specs]
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
template template_name, File.join('spec/system', class_path, filename)
|
13
|
+
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
def template_name
|
16
|
+
'system_spec.rb'
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
end
|
19
|
+
def filename
|
20
|
+
"#{table_name}_spec.rb"
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop: disable Metrics/ModuleLength
|
1
2
|
module RSpec
|
2
3
|
module Rails
|
3
4
|
# Fake class to document RSpec Rails configuration options. In practice,
|
@@ -55,7 +56,7 @@ module RSpec
|
|
55
56
|
end
|
56
57
|
|
57
58
|
# @private
|
58
|
-
def self.initialize_configuration(config) # rubocop:disable Metrics/MethodLength
|
59
|
+
def self.initialize_configuration(config) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity
|
59
60
|
config.backtrace_exclusion_patterns << /vendor\//
|
60
61
|
config.backtrace_exclusion_patterns << %r{lib/rspec/rails}
|
61
62
|
|
@@ -79,10 +80,8 @@ module RSpec
|
|
79
80
|
# `RSpec::Rails::FixtureSupport` directly instead
|
80
81
|
config.include RSpec::Rails::FixtureSupport
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
config.include RSpec::Rails::FileFixtureSupport
|
85
|
-
end
|
83
|
+
config.add_setting :file_fixture_path, default: 'spec/fixtures/files'
|
84
|
+
config.include RSpec::Rails::FileFixtureSupport
|
86
85
|
|
87
86
|
# Add support for fixture_path on fixture_file_upload
|
88
87
|
config.include RSpec::Rails::FixtureFileUploadSupport
|
@@ -105,7 +104,41 @@ module RSpec
|
|
105
104
|
end
|
106
105
|
|
107
106
|
def render_views?
|
108
|
-
rendering_views
|
107
|
+
rendering_views?
|
108
|
+
end
|
109
|
+
|
110
|
+
undef :rendering_views? if respond_to?(:rendering_views?)
|
111
|
+
def rendering_views?
|
112
|
+
!!rendering_views
|
113
|
+
end
|
114
|
+
|
115
|
+
# Define boolean predicates rather than relying on rspec-core due
|
116
|
+
# to the bug fix in rspec/rspec-core#2736, note some of these
|
117
|
+
# predicates are a bit nonsensical, but they exist for backwards
|
118
|
+
# compatibility, we can tidy these up in `rspec-rails` 5.
|
119
|
+
undef :fixture_path? if respond_to?(:fixture_path?)
|
120
|
+
def fixture_path?
|
121
|
+
!!fixture_path
|
122
|
+
end
|
123
|
+
|
124
|
+
undef :global_fixtures? if respond_to?(:global_fixtures?)
|
125
|
+
def global_fixtures?
|
126
|
+
!!global_fixtures
|
127
|
+
end
|
128
|
+
|
129
|
+
undef :infer_base_class_for_anonymous_controllers? if respond_to?(:infer_base_class_for_anonymous_controllers?)
|
130
|
+
def infer_base_class_for_anonymous_controllers?
|
131
|
+
!!infer_base_class_for_anonymous_controllers
|
132
|
+
end
|
133
|
+
|
134
|
+
undef :use_instantiated_fixtures? if respond_to?(:use_instantiated_fixtures?)
|
135
|
+
def use_instantiated_fixtures?
|
136
|
+
!!use_instantiated_fixtures
|
137
|
+
end
|
138
|
+
|
139
|
+
undef :use_transactional_fixtures? if respond_to?(:use_transactional_fixtures?)
|
140
|
+
def use_transactional_fixtures?
|
141
|
+
!!use_transactional_fixtures
|
109
142
|
end
|
110
143
|
|
111
144
|
def infer_spec_type_from_file_location!
|
@@ -156,3 +189,4 @@ module RSpec
|
|
156
189
|
initialize_configuration RSpec.configuration
|
157
190
|
end
|
158
191
|
end
|
192
|
+
# rubocop: enable Metrics/ModuleLength
|
@@ -10,10 +10,7 @@ module RSpec
|
|
10
10
|
include RSpec::Rails::Matchers::RedirectTo
|
11
11
|
include RSpec::Rails::Matchers::RenderTemplate
|
12
12
|
include ActionController::TemplateAssertions
|
13
|
-
|
14
|
-
if ActionPack::VERSION::MAJOR >= 5
|
15
|
-
include ActionDispatch::IntegrationTest::Behavior
|
16
|
-
end
|
13
|
+
include ActionDispatch::IntegrationTest::Behavior
|
17
14
|
|
18
15
|
# Delegates to `Rails.application`.
|
19
16
|
def app
|
@@ -41,7 +41,7 @@ module RSpec
|
|
41
41
|
@method_name ||= [
|
42
42
|
self.class.name.underscore,
|
43
43
|
RSpec.current_example.description.underscore
|
44
|
-
].join("_").tr(CHARS_TO_TRANSLATE.join, "_")
|
44
|
+
].join("_").tr(CHARS_TO_TRANSLATE.join, "_").byteslice(0...200).scrub("") + "_#{rand(1000)}"
|
45
45
|
end
|
46
46
|
|
47
47
|
# Delegates to `Rails.application`.
|
@@ -114,7 +114,8 @@ module RSpec
|
|
114
114
|
original_after_teardown.bind(self).call
|
115
115
|
ensure
|
116
116
|
myio = $stdout
|
117
|
-
|
117
|
+
myio.rewind
|
118
|
+
RSpec.current_example.metadata[:extra_failure_lines] = myio.readlines
|
118
119
|
$stdout = orig_stdout
|
119
120
|
end
|
120
121
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
RSpec.configure do |rspec|
|
2
2
|
# Delay this in order to give users a chance to configure `expect_with`...
|
3
3
|
rspec.before(:suite) do
|
4
|
-
if defined?(RSpec::Matchers) &&
|
4
|
+
if defined?(RSpec::Matchers) &&
|
5
|
+
RSpec::Matchers.configuration.respond_to?(:syntax) && # RSpec 4 dropped support for monkey-patching `should` syntax
|
6
|
+
RSpec::Matchers.configuration.syntax.include?(:should) &&
|
7
|
+
defined?(ActiveRecord::Associations)
|
5
8
|
RSpec::Matchers.configuration.add_should_and_should_not_to ActiveRecord::Associations::CollectionProxy
|
6
9
|
end
|
7
10
|
end
|
@@ -1,16 +1,14 @@
|
|
1
|
-
|
2
|
-
require 'active_support/testing/file_fixtures'
|
1
|
+
require 'active_support/testing/file_fixtures'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
module RSpec
|
4
|
+
module Rails
|
5
|
+
# @private
|
6
|
+
module FileFixtureSupport
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
include ActiveSupport::Testing::FileFixtures
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
10
|
+
included do
|
11
|
+
self.file_fixture_path = RSpec.configuration.file_fixture_path
|
14
12
|
end
|
15
13
|
end
|
16
14
|
end
|
@@ -6,33 +6,49 @@ module RSpec
|
|
6
6
|
|
7
7
|
private
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
# In Rails 6.2 fixture file path needs to be relative to `file_fixture_path` instead, this change
|
10
|
+
# was brought in with a deprecation warning on 6.1. In Rails 6.2 expect to rework this to remove
|
11
|
+
# the old accessor.
|
12
|
+
if ::Rails.version.to_f >= 6.1
|
13
|
+
def rails_fixture_file_wrapper
|
14
|
+
RailsFixtureFileWrapper.file_fixture_path = nil
|
15
|
+
resolved_fixture_path =
|
16
|
+
if respond_to?(:file_fixture_path) && !file_fixture_path.nil?
|
17
|
+
file_fixture_path.to_s
|
18
|
+
else
|
19
|
+
(RSpec.configuration.fixture_path || '').to_s
|
20
|
+
end
|
21
|
+
RailsFixtureFileWrapper.file_fixture_path = File.join(resolved_fixture_path, '') unless resolved_fixture_path.strip.empty?
|
22
|
+
RailsFixtureFileWrapper.instance
|
23
|
+
end
|
24
|
+
else
|
25
|
+
def rails_fixture_file_wrapper
|
26
|
+
RailsFixtureFileWrapper.fixture_path = nil
|
27
|
+
resolved_fixture_path =
|
28
|
+
if respond_to?(:fixture_path) && !fixture_path.nil?
|
29
|
+
fixture_path.to_s
|
30
|
+
else
|
31
|
+
(RSpec.configuration.fixture_path || '').to_s
|
32
|
+
end
|
33
|
+
RailsFixtureFileWrapper.fixture_path = File.join(resolved_fixture_path, '') unless resolved_fixture_path.strip.empty?
|
34
|
+
RailsFixtureFileWrapper.instance
|
35
|
+
end
|
14
36
|
end
|
15
37
|
|
16
38
|
class RailsFixtureFileWrapper
|
17
39
|
include ActionDispatch::TestProcess if defined?(ActionDispatch::TestProcess)
|
18
40
|
|
41
|
+
if ::Rails.version.to_f >= 6.1
|
42
|
+
include ActiveSupport::Testing::FileFixtures
|
43
|
+
end
|
44
|
+
|
19
45
|
class << self
|
20
|
-
|
46
|
+
attr_accessor :fixture_path
|
21
47
|
|
22
48
|
# Get instance of wrapper
|
23
49
|
def instance
|
24
50
|
@instance ||= new
|
25
51
|
end
|
26
|
-
|
27
|
-
# Override fixture_path set
|
28
|
-
# to support Rails 3.0->3.1 using ActionController::TestCase class to resolve fixture_path
|
29
|
-
# see https://apidock.com/rails/v3.0.0/ActionDispatch/TestProcess/fixture_file_upload
|
30
|
-
def fixture_path=(value)
|
31
|
-
if ActionController::TestCase.respond_to?(:fixture_path)
|
32
|
-
ActionController::TestCase.fixture_path = value
|
33
|
-
end
|
34
|
-
@fixture_path = value
|
35
|
-
end
|
36
52
|
end
|
37
53
|
end
|
38
54
|
end
|
@@ -9,16 +9,20 @@ module RSpec
|
|
9
9
|
include RSpec::Rails::MinitestAssertionAdapter
|
10
10
|
include ActiveRecord::TestFixtures
|
11
11
|
|
12
|
+
# @private prevent ActiveSupport::TestFixtures to start a DB transaction.
|
13
|
+
# Monkey patched to avoid collisions with 'let(:name)' in Rails 6.1 and after
|
14
|
+
# and let(:method_name) before Rails 6.1.
|
15
|
+
def run_in_transaction?
|
16
|
+
current_example_name = (RSpec.current_example && RSpec.current_example.metadata[:description])
|
17
|
+
use_transactional_tests && !self.class.uses_transaction?(current_example_name)
|
18
|
+
end
|
19
|
+
|
12
20
|
included do
|
13
21
|
if RSpec.configuration.use_active_record?
|
14
22
|
include Fixtures
|
15
23
|
|
16
24
|
self.fixture_path = RSpec.configuration.fixture_path
|
17
|
-
|
18
|
-
self.use_transactional_tests = RSpec.configuration.use_transactional_fixtures
|
19
|
-
else
|
20
|
-
self.use_transactional_fixtures = RSpec.configuration.use_transactional_fixtures
|
21
|
-
end
|
25
|
+
self.use_transactional_tests = RSpec.configuration.use_transactional_fixtures
|
22
26
|
self.use_instantiated_fixtures = RSpec.configuration.use_instantiated_fixtures
|
23
27
|
|
24
28
|
fixtures RSpec.configuration.global_fixtures if RSpec.configuration.global_fixtures
|
@@ -50,13 +54,6 @@ module RSpec
|
|
50
54
|
end
|
51
55
|
end
|
52
56
|
end
|
53
|
-
|
54
|
-
if ::Rails.version.to_f >= 6.1
|
55
|
-
# @private return the example name for TestFixtures
|
56
|
-
def name
|
57
|
-
@example
|
58
|
-
end
|
59
|
-
end
|
60
57
|
end
|
61
58
|
end
|
62
59
|
end
|
@@ -22,11 +22,20 @@ module RSpec
|
|
22
22
|
@inbound_email = create_inbound_email(message)
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
if defined?(::ApplicationMailbox) && ::ApplicationMailbox.router.respond_to?(:mailbox_for)
|
26
|
+
def matches?(mailbox)
|
27
|
+
@mailbox = mailbox
|
28
|
+
@receiver = ApplicationMailbox.router.mailbox_for(inbound_email)
|
28
29
|
|
29
|
-
|
30
|
+
@receiver == @mailbox
|
31
|
+
end
|
32
|
+
else
|
33
|
+
def matches?(mailbox)
|
34
|
+
@mailbox = mailbox
|
35
|
+
@receiver = ApplicationMailbox.router.send(:match_to_mailbox, inbound_email)
|
36
|
+
|
37
|
+
@receiver == @mailbox
|
38
|
+
end
|
30
39
|
end
|
31
40
|
|
32
41
|
def failure_message
|
@@ -41,7 +50,7 @@ module RSpec
|
|
41
50
|
"expected #{describe_inbound_email} not to route to #{mailbox}"
|
42
51
|
end
|
43
52
|
|
44
|
-
|
53
|
+
private
|
45
54
|
|
46
55
|
attr_reader :inbound_email, :mailbox, :receiver
|
47
56
|
|