rspec-rails 6.1.1 → 7.0.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 +50 -3
- data/README.md +27 -25
- data/lib/generators/rspec/generator/generator_generator.rb +2 -2
- data/lib/generators/rspec/generator/templates/generator_spec.rb +1 -2
- data/lib/generators/rspec/install/templates/spec/rails_helper.rb +7 -2
- data/lib/generators/rspec/mailer/mailer_generator.rb +4 -2
- data/lib/generators/rspec/mailer/templates/preview.rb +3 -3
- data/lib/generators/rspec/scaffold/templates/index_spec.rb +1 -1
- data/lib/rspec/rails/example/mailbox_example_group.rb +1 -1
- data/lib/rspec/rails/example/rails_example_group.rb +2 -0
- data/lib/rspec/rails/example/routing_example_group.rb +0 -2
- data/lib/rspec/rails/example/system_example_group.rb +9 -1
- data/lib/rspec/rails/fixture_support.rb +1 -2
- data/lib/rspec/rails/matchers/active_job.rb +60 -8
- data/lib/rspec/rails/matchers/have_enqueued_mail.rb +31 -0
- data/lib/rspec/rails/matchers/have_http_status.rb +3 -7
- data/lib/rspec/rails/tasks/rspec.rake +3 -1
- data/lib/rspec/rails/version.rb +1 -1
- data/lib/rspec-rails.rb +18 -0
- data.tar.gz.sig +0 -0
- metadata +20 -20
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e12619053ed39f2f0fed4bc0aed2b2e552e400315663632d97cf9a82e2eaa5d3
|
|
4
|
+
data.tar.gz: 7bde5b94d9f990a0d9d08143529ce3e25b9df1df2cf62c216515c0cc6e96cd4c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa5533f32e4ffaf30b13d83677aff9170bf57c42a2c6ec9a591de3f422f73f719a6b575fb14efe8e54f7b8fbc389aa7c7e0f39710017dc8b02834f8dbb6b0aa3
|
|
7
|
+
data.tar.gz: '094c02d867dba7258ea54da266403929508f2601c0ba1e8a8c579e01c6a2b200aaa688b5a8fed58145c2bf6cd53ed4799fecba36dc9acdb23e06d75eea5b2323'
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/Changelog.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
### Development
|
|
2
|
-
[Full Changelog](https://github.com/rspec/rspec-rails/compare/
|
|
2
|
+
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v7.0.0...7-0-maintenance)
|
|
3
|
+
|
|
4
|
+
### 7.0.0 / 2024-09-02
|
|
5
|
+
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.1.5...v7.0.0)
|
|
6
|
+
|
|
7
|
+
Enhancements:
|
|
8
|
+
|
|
9
|
+
* Change default driver for system specs on Rails 7.2 to match its default.
|
|
10
|
+
(Steve Polito, #2746)
|
|
11
|
+
* Verify ActiveJob arguments by comparing to the method signature. (Oli Peate, #2745)
|
|
12
|
+
* Add suggestion to rails_helper.rb to skip when not in test most. (Glauco Custódio, #2751)
|
|
13
|
+
* Add `at_priority` qualifier to `have_enqueued_job` set of matchers. (mbajur, #2759)
|
|
14
|
+
* Add spec directories to `rails stats` on Rails main / 8.0.0. (Petrik de Heus, #2781)
|
|
15
|
+
|
|
16
|
+
### 6.1.5 / 2024-09-02
|
|
17
|
+
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.1.4...v6.1.5)
|
|
18
|
+
|
|
19
|
+
Bug Fixes:
|
|
20
|
+
|
|
21
|
+
* Restore old order of requiring support files. (Franz Liedke, #2785)
|
|
22
|
+
* Prevent running `rake spec:statsetup` on Rails main / 8.0.0. (Petrik de Heus, #2781)
|
|
23
|
+
|
|
24
|
+
### 6.1.4 / 2024-08-15
|
|
25
|
+
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.1.3...v6.1.4)
|
|
26
|
+
|
|
27
|
+
Bug Fixes:
|
|
28
|
+
|
|
29
|
+
* Prevent `have_http_status` matcher raising an error when encountering a raw `Rack::MockResponse`.
|
|
30
|
+
(Christophe Bliard, #2771)
|
|
31
|
+
* Move Rails version conditional from index scaffold generated file to template. (Matt Jankowski, #2777)
|
|
32
|
+
|
|
33
|
+
### 6.1.3 / 2024-06-19
|
|
34
|
+
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.1.2...v6.1.3)
|
|
35
|
+
|
|
36
|
+
Bug Fixes:
|
|
37
|
+
|
|
38
|
+
* Reset `ActiveSupport::CurrentAttributes` between examples. (Javier Julio, #2752)
|
|
39
|
+
* Fix a broken link in generated mailer previews. (Chiara Núñez, #2764)
|
|
40
|
+
* Fix `have_status_code` behaviour with deprecated status names by delegating
|
|
41
|
+
to `Rack::Utils.status_code/1` to set the expected status code. (Darren Boyd, #2765)
|
|
42
|
+
|
|
43
|
+
### 6.1.2 / 2024-03-19
|
|
44
|
+
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.1.1...v6.1.2)
|
|
45
|
+
|
|
46
|
+
Bug Fixes:
|
|
47
|
+
|
|
48
|
+
* Fix generated mailer paths to match Rails convention. (Patrício dos Santos, #2735)
|
|
49
|
+
* Fix class in template for generator specs. (Nicolas Buduroi, #2744)
|
|
3
50
|
|
|
4
51
|
### 6.1.1 / 2024-01-25
|
|
5
52
|
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.1.0...v6.1.1)
|
|
@@ -181,7 +228,7 @@ Enhancements:
|
|
|
181
228
|
(Eloy Espinaco, Luka Lüdicke, #2355, #2356, #2378)
|
|
182
229
|
* Generated scaffold now includes engine route helpers when inside a mountable engine.
|
|
183
230
|
(Andrew W. Lee, #2372)
|
|
184
|
-
* Improve request spec "controller"
|
|
231
|
+
* Improve request spec "controller" scaffold when no action is specified.
|
|
185
232
|
(Thomas Hareau, #2399)
|
|
186
233
|
* Introduce testing snippets concept (Phil Pirozhkov, Benoit Tigeot, #2423)
|
|
187
234
|
* Prevent collisions with `let(:name)` for Rails 6.1 and `let(:method_name)` on older
|
|
@@ -584,7 +631,7 @@ Enhancements:
|
|
|
584
631
|
* Add support for PATCH to route specs created via scaffold. (Igor Zubkov, #1336)
|
|
585
632
|
* Improve controller and routing spec calls to `routes` by using `yield`
|
|
586
633
|
instead of `call`. (Anton Davydov, #1308)
|
|
587
|
-
* Add support for `ActiveJob` specs as standard `RSpec::Rails::
|
|
634
|
+
* Add support for `ActiveJob` specs as standard `RSpec::Rails::RailsExampleGroup`s
|
|
588
635
|
via both `type: :job` and inferring type from spec directory `spec/jobs`.
|
|
589
636
|
(Gabe Martin-Dempesy, #1361)
|
|
590
637
|
* Include `RSpec::Rails::FixtureSupport` into example groups using metadata
|
data/README.md
CHANGED
|
@@ -9,7 +9,8 @@ detailed explanations of how the application is supposed to behave,
|
|
|
9
9
|
expressed in plain English.
|
|
10
10
|
|
|
11
11
|
According to [RSpec Rails new versioning strategy][] use:
|
|
12
|
-
* **[`rspec-rails`
|
|
12
|
+
* **[`rspec-rails` 7.x][]** for Rails 7.x.
|
|
13
|
+
* **[`rspec-rails` 6.x][]** for Rails 6.1.
|
|
13
14
|
* **[`rspec-rails` 5.x][]** for Rails 5.2 or 6.x.
|
|
14
15
|
* **[`rspec-rails` 4.x][]** for Rails from 5.x or 6.x.
|
|
15
16
|
* **[`rspec-rails` 3.x][]** for Rails earlier than 5.0.
|
|
@@ -26,11 +27,12 @@ According to [RSpec Rails new versioning strategy][] use:
|
|
|
26
27
|
[`rspec-rails` 4.x]: https://github.com/rspec/rspec-rails/tree/4-1-maintenance
|
|
27
28
|
[`rspec-rails` 5.x]: https://github.com/rspec/rspec-rails/tree/5-1-maintenance
|
|
28
29
|
[`rspec-rails` 6.x]: https://github.com/rspec/rspec-rails/tree/6-1-maintenance
|
|
30
|
+
[`rspec-rails` 7.x]: https://github.com/rspec/rspec-rails/tree/7-0-maintenance
|
|
29
31
|
[RSpec Rails new versioning strategy]: https://github.com/rspec/rspec-rails/blob/main/rfcs/versioning-strategy.md
|
|
30
32
|
|
|
31
33
|
## Installation
|
|
32
34
|
|
|
33
|
-
**IMPORTANT** This README / branch refers to the
|
|
35
|
+
**IMPORTANT** This README / branch refers to the 7.0.x stable release series, only bugfixes from this series will
|
|
34
36
|
be added here. See the [`main` branch on Github](https://github.com/rspec/rspec-rails/tree/main) if you want or
|
|
35
37
|
require the latest unstable features.
|
|
36
38
|
|
|
@@ -40,7 +42,7 @@ require the latest unstable features.
|
|
|
40
42
|
```ruby
|
|
41
43
|
# Run against this stable release
|
|
42
44
|
group :development, :test do
|
|
43
|
-
gem 'rspec-rails', '~>
|
|
45
|
+
gem 'rspec-rails', '~> 7.0.0'
|
|
44
46
|
end
|
|
45
47
|
|
|
46
48
|
# Or, run against the main branch
|
|
@@ -87,7 +89,7 @@ read the [`rspec-rails` upgrade notes][] to find out what to watch out for.
|
|
|
87
89
|
|
|
88
90
|
Be sure to check the general [RSpec upgrade notes][] as well.
|
|
89
91
|
|
|
90
|
-
[`rspec-rails` upgrade notes]: https://rspec.info/features/
|
|
92
|
+
[`rspec-rails` upgrade notes]: https://rspec.info/features/7-0/rspec-rails/upgrade
|
|
91
93
|
[RSpec upgrade notes]: https://rspec.info/upgrading-from-rspec-2/
|
|
92
94
|
|
|
93
95
|
## Usage
|
|
@@ -209,22 +211,22 @@ to test the various parts of a Rails system:
|
|
|
209
211
|
Follow the links above for examples of how each matcher is used.
|
|
210
212
|
|
|
211
213
|
[the matchers that come standard in RSpec]: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers
|
|
212
|
-
[`be_a_new`]: https://rspec.info/features/
|
|
213
|
-
[`render_template`]: https://rspec.info/features/
|
|
214
|
-
[`redirect_to`]: https://rspec.info/features/
|
|
215
|
-
[`route_to`]: https://rspec.info/features/
|
|
216
|
-
[`be_routable`]: https://rspec.info/features/
|
|
217
|
-
[`have_http_status`]: https://rspec.info/features/
|
|
218
|
-
[`match_array`]: https://rspec.info/features/
|
|
219
|
-
[`have_been_enqueued`]: https://rspec.info/features/
|
|
220
|
-
[`have_enqueued_job`]: https://rspec.info/features/
|
|
214
|
+
[`be_a_new`]: https://rspec.info/features/7-0/rspec-rails/matchers/new-record-matcher
|
|
215
|
+
[`render_template`]: https://rspec.info/features/7-0/rspec-rails/matchers/render-template-matcher
|
|
216
|
+
[`redirect_to`]: https://rspec.info/features/7-0/rspec-rails/matchers/redirect-to-matcher
|
|
217
|
+
[`route_to`]: https://rspec.info/features/7-0/rspec-rails/routing-specs/route-to-matcher
|
|
218
|
+
[`be_routable`]: https://rspec.info/features/7-0/rspec-rails/routing-specs/be-routable-matcher
|
|
219
|
+
[`have_http_status`]: https://rspec.info/features/7-0/rspec-rails/matchers/have-http-status-matcher
|
|
220
|
+
[`match_array`]: https://rspec.info/features/7-0/rspec-rails/matchers/relation-match-array
|
|
221
|
+
[`have_been_enqueued`]: https://rspec.info/features/7-0/rspec-rails/matchers/have-been-enqueued-matcher
|
|
222
|
+
[`have_enqueued_job`]: https://rspec.info/features/7-0/rspec-rails/matchers/have-enqueued-job-matcher
|
|
221
223
|
|
|
222
224
|
### What else does RSpec Rails add?
|
|
223
225
|
|
|
224
226
|
For a comprehensive look at RSpec Rails’ features,
|
|
225
227
|
read the [official Cucumber documentation][].
|
|
226
228
|
|
|
227
|
-
[official Cucumber documentation]: https://rspec.info/features/
|
|
229
|
+
[official Cucumber documentation]: https://rspec.info/features/7-0/rspec-rails
|
|
228
230
|
|
|
229
231
|
## What tests should I write?
|
|
230
232
|
|
|
@@ -269,20 +271,20 @@ RSpec.describe User, type: :model do
|
|
|
269
271
|
...
|
|
270
272
|
```
|
|
271
273
|
|
|
272
|
-
[request]: https://rspec.info/features/
|
|
273
|
-
[feature]: https://rspec.info/features/
|
|
274
|
-
[system]: https://rspec.info/features/
|
|
275
|
-
[model]: https://rspec.info/features/
|
|
276
|
-
[controller]: https://rspec.info/features/
|
|
277
|
-
[mailer]: https://rspec.info/features/
|
|
278
|
-
[job]: https://rspec.info/features/
|
|
279
|
-
[view]: https://rspec.info/features/
|
|
280
|
-
[routing]: https://rspec.info/features/
|
|
281
|
-
[helper]: https://rspec.info/features/
|
|
274
|
+
[request]: https://rspec.info/features/7-0/rspec-rails/request-specs/request-spec
|
|
275
|
+
[feature]: https://rspec.info/features/7-0/rspec-rails/feature-specs/feature-spec
|
|
276
|
+
[system]: https://rspec.info/features/7-0/rspec-rails/system-specs/system-specs
|
|
277
|
+
[model]: https://rspec.info/features/7-0/rspec-rails/model-specs
|
|
278
|
+
[controller]: https://rspec.info/features/7-0/rspec-rails/controller-specs
|
|
279
|
+
[mailer]: https://rspec.info/features/7-0/rspec-rails/mailer-specs
|
|
280
|
+
[job]: https://rspec.info/features/7-0/rspec-rails/job-specs/job-spec
|
|
281
|
+
[view]: https://rspec.info/features/7-0/rspec-rails/view-specs/view-spec
|
|
282
|
+
[routing]: https://rspec.info/features/7-0/rspec-rails/routing-specs
|
|
283
|
+
[helper]: https://rspec.info/features/7-0/rspec-rails/helper-specs/helper-spec
|
|
282
284
|
[`ActionDispatch::IntegrationTest`]: https://api.rubyonrails.org/classes/ActionDispatch/IntegrationTest.html
|
|
283
285
|
[`ActionDispatch::SystemTestCase`]: https://api.rubyonrails.org/classes/ActionDispatch/SystemTestCase.html
|
|
284
286
|
[`ActionController::TestCase`]: https://api.rubyonrails.org/classes/ActionController/TestCase.html
|
|
285
|
-
[in the appropriate folder]: https://rspec.info/features/
|
|
287
|
+
[in the appropriate folder]: https://rspec.info/features/7-0/rspec-rails/directory-structure
|
|
286
288
|
|
|
287
289
|
### System specs, feature specs, request specs–what’s the difference?
|
|
288
290
|
|
|
@@ -4,7 +4,7 @@ module Rspec
|
|
|
4
4
|
module Generators
|
|
5
5
|
# @private
|
|
6
6
|
class GeneratorGenerator < Base
|
|
7
|
-
class_option :generator_specs, type: :boolean, default: true,
|
|
7
|
+
class_option :generator_specs, type: :boolean, default: true, desc: 'Generate generator specs'
|
|
8
8
|
|
|
9
9
|
def generate_generator_spec
|
|
10
10
|
return unless options[:generator_specs]
|
|
@@ -17,7 +17,7 @@ module Rspec
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def filename
|
|
20
|
-
"#{
|
|
20
|
+
"#{file_name}_generator_spec.rb"
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -4,6 +4,11 @@ ENV['RAILS_ENV'] ||= 'test'
|
|
|
4
4
|
require_relative '../config/environment'
|
|
5
5
|
# Prevent database truncation if the environment is production
|
|
6
6
|
abort("The Rails environment is running in production mode!") if Rails.env.production?
|
|
7
|
+
<% if RSpec::Rails::FeatureCheck.has_active_record_migration? -%>
|
|
8
|
+
# Uncomment the line below in case you have `--require rails_helper` in the `.rspec` file
|
|
9
|
+
# that will avoid rails generators crashing because migrations haven't been run yet
|
|
10
|
+
# return unless Rails.env.test?
|
|
11
|
+
<% end -%>
|
|
7
12
|
require 'rspec/rails'
|
|
8
13
|
# Add additional requires below this line. Rails is not loaded until this point!
|
|
9
14
|
|
|
@@ -20,7 +25,7 @@ require 'rspec/rails'
|
|
|
20
25
|
# directory. Alternatively, in the individual `*_spec.rb` files, manually
|
|
21
26
|
# require only the support files necessary.
|
|
22
27
|
#
|
|
23
|
-
# Rails.root.glob('spec/support/**/*.rb').
|
|
28
|
+
# Rails.root.glob('spec/support/**/*.rb').sort_by(&:to_s).each { |f| require f }
|
|
24
29
|
|
|
25
30
|
<% if RSpec::Rails::FeatureCheck.has_active_record_migration? -%>
|
|
26
31
|
# Checks for pending migrations and applies them before tests are run.
|
|
@@ -74,7 +79,7 @@ RSpec.configure do |config|
|
|
|
74
79
|
# end
|
|
75
80
|
#
|
|
76
81
|
# The different available types are documented in the features, such as in
|
|
77
|
-
# https://rspec.info/features/
|
|
82
|
+
# https://rspec.info/features/7-0/rspec-rails
|
|
78
83
|
config.infer_spec_type_from_file_location!
|
|
79
84
|
|
|
80
85
|
# Filter lines from Rails gems in backtraces.
|
|
@@ -8,7 +8,8 @@ module Rspec
|
|
|
8
8
|
argument :actions, type: :array, default: [], banner: "method method"
|
|
9
9
|
|
|
10
10
|
def generate_mailer_spec
|
|
11
|
-
|
|
11
|
+
file_suffix = file_name.end_with?('mailer') ? 'spec.rb' : 'mailer_spec.rb'
|
|
12
|
+
template "mailer_spec.rb", target_path('mailers', class_path, [file_name, file_suffix].join('_'))
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def generate_fixtures_files
|
|
@@ -21,7 +22,8 @@ module Rspec
|
|
|
21
22
|
def generate_preview_files
|
|
22
23
|
return unless RSpec::Rails::FeatureCheck.has_action_mailer_preview?
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
file_suffix = file_name.end_with?('mailer') ? 'preview.rb' : 'mailer_preview.rb'
|
|
26
|
+
template "preview.rb", target_path("mailers/previews", class_path, [file_name, file_suffix].join('_'))
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<% module_namespacing do -%>
|
|
2
|
-
# Preview all emails at http://localhost:3000/rails/mailers/<%= file_path %>
|
|
3
|
-
class <%= class_name %>Preview < ActionMailer::Preview
|
|
2
|
+
# Preview all emails at http://localhost:3000/rails/mailers/<%= file_path %>_mailer
|
|
3
|
+
class <%= class_name %><%= 'Mailer' unless class_name.end_with?('Mailer') %>Preview < ActionMailer::Preview
|
|
4
4
|
<% actions.each do |action| -%>
|
|
5
5
|
|
|
6
|
-
# Preview this email at http://localhost:3000/rails/mailers/<%= file_path
|
|
6
|
+
# Preview this email at http://localhost:3000/rails/mailers/<%= file_path %>_mailer/<%= action %>
|
|
7
7
|
def <%= action %>
|
|
8
8
|
<%= class_name.sub(/(Mailer)?$/, 'Mailer') %>.<%= action %>
|
|
9
9
|
end
|
|
@@ -18,7 +18,7 @@ RSpec.describe "<%= ns_table_name %>/index", <%= type_metatag(:view) %> do
|
|
|
18
18
|
|
|
19
19
|
it "renders a list of <%= ns_table_name %>" do
|
|
20
20
|
render
|
|
21
|
-
cell_selector = Rails::VERSION::STRING >= '7' ? 'div>p' : 'tr>td'
|
|
21
|
+
cell_selector = <%= Rails::VERSION::STRING >= '7' ? "'div>p'" : "'tr>td'" %>
|
|
22
22
|
<% for attribute in output_attributes -%>
|
|
23
23
|
assert_select cell_selector, text: Regexp.new(<%= value_for(attribute) %>.to_s), count: 2
|
|
24
24
|
<% end -%>
|
|
@@ -69,7 +69,7 @@ module RSpec
|
|
|
69
69
|
#
|
|
70
70
|
# @param message [Hash, Mail::Message] a mail message or hash of
|
|
71
71
|
# attributes used to build one
|
|
72
|
-
# @return [
|
|
72
|
+
# @return [ActionMailbox::InboundMessage]
|
|
73
73
|
def process(message)
|
|
74
74
|
MailboxExampleGroup.create_inbound_email(message).tap do |mail|
|
|
75
75
|
self.class.mailbox_class.receive(mail)
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require 'rspec/rails/matchers'
|
|
4
4
|
|
|
5
5
|
if ::Rails::VERSION::MAJOR >= 7
|
|
6
|
+
require 'active_support/current_attributes/test_helper'
|
|
6
7
|
require 'active_support/execution_context/test_helper'
|
|
7
8
|
end
|
|
8
9
|
|
|
@@ -18,6 +19,7 @@ module RSpec
|
|
|
18
19
|
include RSpec::Rails::FixtureSupport
|
|
19
20
|
if ::Rails::VERSION::MAJOR >= 7
|
|
20
21
|
include RSpec::Rails::TaggedLoggingAdapter
|
|
22
|
+
include ActiveSupport::CurrentAttributes::TestHelper
|
|
21
23
|
include ActiveSupport::ExecutionContext::TestHelper
|
|
22
24
|
end
|
|
23
25
|
end
|
|
@@ -95,6 +95,14 @@ module RSpec
|
|
|
95
95
|
::Rails.application
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
+
# Default driver to assign if none specified.
|
|
99
|
+
DEFAULT_DRIVER =
|
|
100
|
+
if ::Rails::VERSION::STRING.to_f >= 7.2
|
|
101
|
+
:selenium_chrome_headless
|
|
102
|
+
else
|
|
103
|
+
:selenium
|
|
104
|
+
end
|
|
105
|
+
|
|
98
106
|
included do |other|
|
|
99
107
|
ActiveSupport.on_load(:action_dispatch_system_test_case) do
|
|
100
108
|
ActionDispatch::SystemTesting::Server.silence_puma = true
|
|
@@ -137,7 +145,7 @@ module RSpec
|
|
|
137
145
|
self.class.before do
|
|
138
146
|
# A user may have already set the driver, so only default if driver
|
|
139
147
|
# is not set
|
|
140
|
-
driven_by(
|
|
148
|
+
driven_by(DEFAULT_DRIVER) unless @driver
|
|
141
149
|
end
|
|
142
150
|
end
|
|
143
151
|
|
|
@@ -10,8 +10,7 @@ module RSpec
|
|
|
10
10
|
include ActiveRecord::TestFixtures
|
|
11
11
|
|
|
12
12
|
# @private prevent ActiveSupport::TestFixtures to start a DB transaction.
|
|
13
|
-
# Monkey patched to avoid collisions with 'let(:name)'
|
|
14
|
-
# and let(:method_name) before Rails 6.1.
|
|
13
|
+
# Monkey patched to avoid collisions with 'let(:name)' since Rails 6.1
|
|
15
14
|
def run_in_transaction?
|
|
16
15
|
current_example_name = (RSpec.current_example && RSpec.current_example.metadata[:description])
|
|
17
16
|
use_transactional_tests && !self.class.uses_transaction?(current_example_name)
|
|
@@ -14,6 +14,7 @@ module RSpec
|
|
|
14
14
|
def initialize
|
|
15
15
|
@args = []
|
|
16
16
|
@queue = nil
|
|
17
|
+
@priority = nil
|
|
17
18
|
@at = nil
|
|
18
19
|
@block = proc { }
|
|
19
20
|
set_expected_number(:exactly, 1)
|
|
@@ -30,6 +31,11 @@ module RSpec
|
|
|
30
31
|
self
|
|
31
32
|
end
|
|
32
33
|
|
|
34
|
+
def at_priority(priority)
|
|
35
|
+
@priority = priority.to_i
|
|
36
|
+
self
|
|
37
|
+
end
|
|
38
|
+
|
|
33
39
|
def at(time_or_date)
|
|
34
40
|
case time_or_date
|
|
35
41
|
when Time then @at = Time.at(time_or_date.to_f)
|
|
@@ -71,6 +77,8 @@ module RSpec
|
|
|
71
77
|
end
|
|
72
78
|
|
|
73
79
|
def failure_message
|
|
80
|
+
return @failure_message if defined?(@failure_message)
|
|
81
|
+
|
|
74
82
|
"expected to #{self.class::FAILURE_MESSAGE_EXPECTATION_ACTION} #{base_message}".tap do |msg|
|
|
75
83
|
if @unmatching_jobs.any?
|
|
76
84
|
msg << "\nQueued jobs:"
|
|
@@ -101,7 +109,7 @@ module RSpec
|
|
|
101
109
|
|
|
102
110
|
def check(jobs)
|
|
103
111
|
@matching_jobs, @unmatching_jobs = jobs.partition do |job|
|
|
104
|
-
if
|
|
112
|
+
if matches_constraints?(job)
|
|
105
113
|
args = deserialize_arguments(job)
|
|
106
114
|
@block.call(*args)
|
|
107
115
|
true
|
|
@@ -109,6 +117,12 @@ module RSpec
|
|
|
109
117
|
false
|
|
110
118
|
end
|
|
111
119
|
end
|
|
120
|
+
|
|
121
|
+
if (signature_mismatch = detect_args_signature_mismatch(@matching_jobs))
|
|
122
|
+
@failure_message = signature_mismatch
|
|
123
|
+
return false
|
|
124
|
+
end
|
|
125
|
+
|
|
112
126
|
@matching_jobs_count = @matching_jobs.size
|
|
113
127
|
|
|
114
128
|
case @expectation_type
|
|
@@ -123,6 +137,7 @@ module RSpec
|
|
|
123
137
|
msg << " with #{@args}," if @args.any?
|
|
124
138
|
msg << " on queue #{@queue}," if @queue
|
|
125
139
|
msg << " at #{@at.inspect}," if @at
|
|
140
|
+
msg << " with priority #{@priority}," if @priority
|
|
126
141
|
msg << " but #{self.class::MESSAGE_EXPECTATION_ACTION} #{@matching_jobs_count}"
|
|
127
142
|
end
|
|
128
143
|
end
|
|
@@ -132,13 +147,23 @@ module RSpec
|
|
|
132
147
|
msg_parts << "with #{deserialize_arguments(job)}" if job[:args].any?
|
|
133
148
|
msg_parts << "on queue #{job[:queue]}" if job[:queue]
|
|
134
149
|
msg_parts << "at #{Time.at(job[:at])}" if job[:at]
|
|
150
|
+
msg_parts <<
|
|
151
|
+
if job[:priority]
|
|
152
|
+
"with priority #{job[:priority]}"
|
|
153
|
+
else
|
|
154
|
+
"with no priority specified"
|
|
155
|
+
end
|
|
135
156
|
|
|
136
157
|
"#{job[:job].name} job".tap do |msg|
|
|
137
158
|
msg << " #{msg_parts.join(', ')}" if msg_parts.any?
|
|
138
159
|
end
|
|
139
160
|
end
|
|
140
161
|
|
|
141
|
-
def
|
|
162
|
+
def matches_constraints?(job)
|
|
163
|
+
job_matches?(job) && arguments_match?(job) && queue_match?(job) && at_match?(job) && priority_match?(job)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def job_matches?(job)
|
|
142
167
|
@job ? @job == job[:job] : true
|
|
143
168
|
end
|
|
144
169
|
|
|
@@ -152,12 +177,39 @@ module RSpec
|
|
|
152
177
|
end
|
|
153
178
|
end
|
|
154
179
|
|
|
180
|
+
def detect_args_signature_mismatch(jobs)
|
|
181
|
+
jobs.each do |job|
|
|
182
|
+
args = deserialize_arguments(job)
|
|
183
|
+
|
|
184
|
+
if (signature_mismatch = check_args_signature_mismatch(job.fetch(:job), :perform, args))
|
|
185
|
+
return signature_mismatch
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
nil
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def check_args_signature_mismatch(job_class, job_method, args)
|
|
193
|
+
signature = Support::MethodSignature.new(job_class.public_instance_method(job_method))
|
|
194
|
+
verifier = Support::StrictSignatureVerifier.new(signature, args)
|
|
195
|
+
|
|
196
|
+
unless verifier.valid?
|
|
197
|
+
"Incorrect arguments passed to #{job_class.name}: #{verifier.error_message}"
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
155
201
|
def queue_match?(job)
|
|
156
202
|
return true unless @queue
|
|
157
203
|
|
|
158
204
|
@queue == job[:queue]
|
|
159
205
|
end
|
|
160
206
|
|
|
207
|
+
def priority_match?(job)
|
|
208
|
+
return true unless @priority
|
|
209
|
+
|
|
210
|
+
@priority == job[:priority]
|
|
211
|
+
end
|
|
212
|
+
|
|
161
213
|
def at_match?(job)
|
|
162
214
|
return true unless @at
|
|
163
215
|
return job[:at].nil? if @at == :no_wait
|
|
@@ -384,33 +436,33 @@ module RSpec
|
|
|
384
436
|
#
|
|
385
437
|
# @example
|
|
386
438
|
# expect {
|
|
387
|
-
#
|
|
439
|
+
# perform_enqueued_jobs { HeavyLiftingJob.perform_later }
|
|
388
440
|
# }.to have_performed_job
|
|
389
441
|
#
|
|
390
442
|
# expect {
|
|
391
|
-
#
|
|
443
|
+
# perform_enqueued_jobs {
|
|
392
444
|
# HelloJob.perform_later
|
|
393
445
|
# HeavyLiftingJob.perform_later
|
|
394
446
|
# }
|
|
395
447
|
# }.to have_performed_job(HelloJob).exactly(:once)
|
|
396
448
|
#
|
|
397
449
|
# expect {
|
|
398
|
-
#
|
|
450
|
+
# perform_enqueued_jobs { 3.times { HelloJob.perform_later } }
|
|
399
451
|
# }.to have_performed_job(HelloJob).at_least(2).times
|
|
400
452
|
#
|
|
401
453
|
# expect {
|
|
402
|
-
#
|
|
454
|
+
# perform_enqueued_jobs { HelloJob.perform_later }
|
|
403
455
|
# }.to have_performed_job(HelloJob).at_most(:twice)
|
|
404
456
|
#
|
|
405
457
|
# expect {
|
|
406
|
-
#
|
|
458
|
+
# perform_enqueued_jobs {
|
|
407
459
|
# HelloJob.perform_later
|
|
408
460
|
# HeavyLiftingJob.perform_later
|
|
409
461
|
# }
|
|
410
462
|
# }.to have_performed_job(HelloJob).and have_performed_job(HeavyLiftingJob)
|
|
411
463
|
#
|
|
412
464
|
# expect {
|
|
413
|
-
#
|
|
465
|
+
# perform_enqueued_jobs {
|
|
414
466
|
# HelloJob.set(wait_until: Date.tomorrow.noon, queue: "low").perform_later(42)
|
|
415
467
|
# }
|
|
416
468
|
# }.to have_performed_job.with(42).on_queue("low").at(Date.tomorrow.noon)
|
|
@@ -41,6 +41,8 @@ module RSpec
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def failure_message
|
|
44
|
+
return @failure_message if defined?(@failure_message)
|
|
45
|
+
|
|
44
46
|
"expected to enqueue #{base_message}".tap do |msg|
|
|
45
47
|
msg << "\n#{unmatching_mail_jobs_message}" if unmatching_mail_jobs.any?
|
|
46
48
|
end
|
|
@@ -89,6 +91,22 @@ module RSpec
|
|
|
89
91
|
super(job)
|
|
90
92
|
end
|
|
91
93
|
|
|
94
|
+
def detect_args_signature_mismatch(jobs)
|
|
95
|
+
return if @method_name.nil?
|
|
96
|
+
|
|
97
|
+
mailer_class = mailer_class_name.constantize
|
|
98
|
+
|
|
99
|
+
jobs.each do |job|
|
|
100
|
+
mailer_args = extract_args_without_parameterized_params(job)
|
|
101
|
+
|
|
102
|
+
if (signature_mismatch = check_args_signature_mismatch(mailer_class, @method_name, mailer_args))
|
|
103
|
+
return signature_mismatch
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
nil
|
|
108
|
+
end
|
|
109
|
+
|
|
92
110
|
def base_mailer_args
|
|
93
111
|
[mailer_class_name, @method_name.to_s, MAILER_JOB_METHOD]
|
|
94
112
|
end
|
|
@@ -157,6 +175,19 @@ module RSpec
|
|
|
157
175
|
end
|
|
158
176
|
end
|
|
159
177
|
|
|
178
|
+
def extract_args_without_parameterized_params(job)
|
|
179
|
+
args = deserialize_arguments(job)
|
|
180
|
+
mailer_args = args - base_mailer_args
|
|
181
|
+
|
|
182
|
+
if parameterized_mail?(job)
|
|
183
|
+
mailer_args = mailer_args[1..-1] # ignore parameterized params
|
|
184
|
+
elsif mailer_args.last.is_a?(Hash) && mailer_args.last.key?(:args)
|
|
185
|
+
mailer_args = args.last[:args]
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
mailer_args
|
|
189
|
+
end
|
|
190
|
+
|
|
160
191
|
def legacy_mail?(job)
|
|
161
192
|
RSpec::Rails::FeatureCheck.has_action_mailer_legacy_delivery_job? && job[:job] <= ActionMailer::DeliveryJob
|
|
162
193
|
end
|
|
@@ -33,7 +33,7 @@ module RSpec
|
|
|
33
33
|
# @param obj [Object] object to convert to a response
|
|
34
34
|
# @return [ActionDispatch::TestResponse]
|
|
35
35
|
def as_test_response(obj)
|
|
36
|
-
if ::ActionDispatch::Response === obj
|
|
36
|
+
if ::ActionDispatch::Response === obj || ::Rack::MockResponse === obj
|
|
37
37
|
::ActionDispatch::TestResponse.from_response(obj)
|
|
38
38
|
elsif ::ActionDispatch::TestResponse === obj
|
|
39
39
|
obj
|
|
@@ -216,11 +216,7 @@ module RSpec
|
|
|
216
216
|
# @see Rack::Utils::SYMBOL_TO_STATUS_CODE
|
|
217
217
|
# @raise [ArgumentError] if an associated code could not be found
|
|
218
218
|
def set_expected_code!
|
|
219
|
-
@expected ||=
|
|
220
|
-
Rack::Utils::SYMBOL_TO_STATUS_CODE.fetch(expected_status) do
|
|
221
|
-
raise ArgumentError,
|
|
222
|
-
"Invalid HTTP status: #{expected_status.inspect}"
|
|
223
|
-
end
|
|
219
|
+
@expected ||= Rack::Utils.status_code(expected_status)
|
|
224
220
|
end
|
|
225
221
|
end
|
|
226
222
|
|
|
@@ -237,7 +233,7 @@ module RSpec
|
|
|
237
233
|
# expect(response).to have_http_status(:redirect)
|
|
238
234
|
#
|
|
239
235
|
# @see RSpec::Rails::Matchers#have_http_status
|
|
240
|
-
# @see https://github.com/rails/rails/blob/
|
|
236
|
+
# @see https://github.com/rails/rails/blob/7-2-stable/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
|
|
241
237
|
class GenericStatus < RSpec::Rails::Matchers::BaseMatcher
|
|
242
238
|
include HaveHttpStatus
|
|
243
239
|
|
data/lib/rspec/rails/version.rb
CHANGED
data/lib/rspec-rails.rb
CHANGED
|
@@ -9,6 +9,24 @@ module RSpec
|
|
|
9
9
|
# As of Rails 5.1.0 you can register directories to work with `rake notes`
|
|
10
10
|
require 'rails/source_annotation_extractor'
|
|
11
11
|
::Rails::SourceAnnotationExtractor::Annotation.register_directories("spec")
|
|
12
|
+
|
|
13
|
+
# As of Rails 8.0.0 you can register directories to work with `rails stats`
|
|
14
|
+
if ::Rails::VERSION::STRING >= "8.0.0"
|
|
15
|
+
require 'rails/code_statistics'
|
|
16
|
+
|
|
17
|
+
dirs = Dir['./spec/**/*_spec.rb']
|
|
18
|
+
.map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }
|
|
19
|
+
.uniq
|
|
20
|
+
.select { |f| File.directory?(f) }
|
|
21
|
+
|
|
22
|
+
Hash[dirs.map { |d| [d.split('/').last, d] }].each do |type, dir|
|
|
23
|
+
name = type.singularize.capitalize
|
|
24
|
+
|
|
25
|
+
::Rails::CodeStatistics.register_directory "#{name} specs", dir
|
|
26
|
+
::Rails::CodeStatistics::TEST_TYPES << "#{name} specs"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
12
30
|
generators = config.app_generators
|
|
13
31
|
generators.integration_tool :rspec
|
|
14
32
|
generators.test_framework :rspec
|
data.tar.gz.sig
CHANGED
|
Binary file
|
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:
|
|
4
|
+
version: 7.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Chelimsky
|
|
@@ -44,7 +44,7 @@ cert_chain:
|
|
|
44
44
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
|
45
45
|
F3MdtaDehhjC
|
|
46
46
|
-----END CERTIFICATE-----
|
|
47
|
-
date: 2024-
|
|
47
|
+
date: 2024-09-02 00:00:00.000000000 Z
|
|
48
48
|
dependencies:
|
|
49
49
|
- !ruby/object:Gem::Dependency
|
|
50
50
|
name: actionpack
|
|
@@ -52,98 +52,98 @@ dependencies:
|
|
|
52
52
|
requirements:
|
|
53
53
|
- - ">="
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '
|
|
55
|
+
version: '7.0'
|
|
56
56
|
type: :runtime
|
|
57
57
|
prerelease: false
|
|
58
58
|
version_requirements: !ruby/object:Gem::Requirement
|
|
59
59
|
requirements:
|
|
60
60
|
- - ">="
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '
|
|
62
|
+
version: '7.0'
|
|
63
63
|
- !ruby/object:Gem::Dependency
|
|
64
64
|
name: activesupport
|
|
65
65
|
requirement: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
67
|
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '
|
|
69
|
+
version: '7.0'
|
|
70
70
|
type: :runtime
|
|
71
71
|
prerelease: false
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
|
74
74
|
- - ">="
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: '
|
|
76
|
+
version: '7.0'
|
|
77
77
|
- !ruby/object:Gem::Dependency
|
|
78
78
|
name: railties
|
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
|
81
81
|
- - ">="
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: '
|
|
83
|
+
version: '7.0'
|
|
84
84
|
type: :runtime
|
|
85
85
|
prerelease: false
|
|
86
86
|
version_requirements: !ruby/object:Gem::Requirement
|
|
87
87
|
requirements:
|
|
88
88
|
- - ">="
|
|
89
89
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: '
|
|
90
|
+
version: '7.0'
|
|
91
91
|
- !ruby/object:Gem::Dependency
|
|
92
92
|
name: rspec-core
|
|
93
93
|
requirement: !ruby/object:Gem::Requirement
|
|
94
94
|
requirements:
|
|
95
95
|
- - "~>"
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: '3.
|
|
97
|
+
version: '3.13'
|
|
98
98
|
type: :runtime
|
|
99
99
|
prerelease: false
|
|
100
100
|
version_requirements: !ruby/object:Gem::Requirement
|
|
101
101
|
requirements:
|
|
102
102
|
- - "~>"
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '3.
|
|
104
|
+
version: '3.13'
|
|
105
105
|
- !ruby/object:Gem::Dependency
|
|
106
106
|
name: rspec-expectations
|
|
107
107
|
requirement: !ruby/object:Gem::Requirement
|
|
108
108
|
requirements:
|
|
109
109
|
- - "~>"
|
|
110
110
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: '3.
|
|
111
|
+
version: '3.13'
|
|
112
112
|
type: :runtime
|
|
113
113
|
prerelease: false
|
|
114
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
115
115
|
requirements:
|
|
116
116
|
- - "~>"
|
|
117
117
|
- !ruby/object:Gem::Version
|
|
118
|
-
version: '3.
|
|
118
|
+
version: '3.13'
|
|
119
119
|
- !ruby/object:Gem::Dependency
|
|
120
120
|
name: rspec-mocks
|
|
121
121
|
requirement: !ruby/object:Gem::Requirement
|
|
122
122
|
requirements:
|
|
123
123
|
- - "~>"
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: '3.
|
|
125
|
+
version: '3.13'
|
|
126
126
|
type: :runtime
|
|
127
127
|
prerelease: false
|
|
128
128
|
version_requirements: !ruby/object:Gem::Requirement
|
|
129
129
|
requirements:
|
|
130
130
|
- - "~>"
|
|
131
131
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: '3.
|
|
132
|
+
version: '3.13'
|
|
133
133
|
- !ruby/object:Gem::Dependency
|
|
134
134
|
name: rspec-support
|
|
135
135
|
requirement: !ruby/object:Gem::Requirement
|
|
136
136
|
requirements:
|
|
137
137
|
- - "~>"
|
|
138
138
|
- !ruby/object:Gem::Version
|
|
139
|
-
version: '3.
|
|
139
|
+
version: '3.13'
|
|
140
140
|
type: :runtime
|
|
141
141
|
prerelease: false
|
|
142
142
|
version_requirements: !ruby/object:Gem::Requirement
|
|
143
143
|
requirements:
|
|
144
144
|
- - "~>"
|
|
145
145
|
- !ruby/object:Gem::Version
|
|
146
|
-
version: '3.
|
|
146
|
+
version: '3.13'
|
|
147
147
|
- !ruby/object:Gem::Dependency
|
|
148
148
|
name: ammeter
|
|
149
149
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -186,7 +186,7 @@ dependencies:
|
|
|
186
186
|
- - "~>"
|
|
187
187
|
- !ruby/object:Gem::Version
|
|
188
188
|
version: '7.0'
|
|
189
|
-
description: rspec-rails
|
|
189
|
+
description: rspec-rails integrates the Rails testing helpers into RSpec.
|
|
190
190
|
email: rspec@googlegroups.com
|
|
191
191
|
executables: []
|
|
192
192
|
extensions: []
|
|
@@ -297,7 +297,7 @@ licenses:
|
|
|
297
297
|
- MIT
|
|
298
298
|
metadata:
|
|
299
299
|
bug_tracker_uri: https://github.com/rspec/rspec-rails/issues
|
|
300
|
-
changelog_uri: https://github.com/rspec/rspec-rails/blob/
|
|
300
|
+
changelog_uri: https://github.com/rspec/rspec-rails/blob/v7.0.0/Changelog.md
|
|
301
301
|
documentation_uri: https://rspec.info/documentation/
|
|
302
302
|
mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
|
|
303
303
|
source_code_uri: https://github.com/rspec/rspec-rails
|
|
@@ -310,14 +310,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
310
310
|
requirements:
|
|
311
311
|
- - ">="
|
|
312
312
|
- !ruby/object:Gem::Version
|
|
313
|
-
version: 2.
|
|
313
|
+
version: 2.7.0
|
|
314
314
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
315
|
requirements:
|
|
316
316
|
- - ">="
|
|
317
317
|
- !ruby/object:Gem::Version
|
|
318
318
|
version: '0'
|
|
319
319
|
requirements: []
|
|
320
|
-
rubygems_version: 3.5.
|
|
320
|
+
rubygems_version: 3.5.11
|
|
321
321
|
signing_key:
|
|
322
322
|
specification_version: 4
|
|
323
323
|
summary: RSpec for Rails
|
metadata.gz.sig
CHANGED
|
Binary file
|