rspec-rails 4.0.0 → 4.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e8f5dabd4f5335dc409c77670d7aef552636874486111f105613d54e4270375
4
- data.tar.gz: 72f211f8667a1d6faedaa8e02877958ccd742c5591107ed568a620fc38999c55
3
+ metadata.gz: b530810e523033d7513c99d9c37e6d6489803fa6d5cc3f2f734f453f4f1820e7
4
+ data.tar.gz: ba735aede717f9b8474f74a35bfa9377192ecbe234dbb215ece3f0a41583db3f
5
5
  SHA512:
6
- metadata.gz: a4125a040fcc9d7b1e9d8ee802f2d9ad75bc581a3e9263c329db8ddaccfd49988ccaab066c0aebad50e3b78a99d0ebe22e04a9648e44f6e1284325ea112e4c63
7
- data.tar.gz: e08c9439828c7f1b2f3ec543ea72d554f92d79adde6cb01e19d8486c3fc64887432239d1159d4aea7a6b8811cd4f3aaff811b777b3dff80569facfaa38ede625
6
+ metadata.gz: 29d53a4939bb2c0f18a80eac33e18fa9d7e905497f2735a30800c2be5bf0b0499f0b84be8ffbec93e6793ed8dcb14fe648017aecd36e52439d5f4a6f0e8c3450
7
+ data.tar.gz: c3d15b2bf8a9c5182aef5760027142898394ec83d75a210dce65f78f4dd5496cdb7451f2b30908a06942c9e897a1b7ba96254e00f59eefab3f151a805e8cda36
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/Changelog.md CHANGED
@@ -1,50 +1,70 @@
1
- ### 4.0.0.rc1 / 2020-03-13
2
- [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.0.beta4...v4.0.0.rc1)
1
+ ### 4.1.2 / 2021-03-10
2
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.1.1...v4.1.2)
3
3
 
4
- Enhancements:
4
+ Bug Fixes:
5
5
 
6
- * Allow `ActiveJob` matchers `#on_queue` modifier to take symbolic queue names. (Nils Sommer, #2283)
7
- * The scaffold generator now generates request specs in preference to controller specs.
8
- (Luka Lüdicke, #2288)
9
- * Add configuration option to disable ActiveRecord. (Jon Rowe, Phil Pirozhkov, Hermann Mayer, #2266)
10
- * Set `ActionDispatch::SystemTesting::Server.silence_puma = true` when running system specs.
11
- (ta1kt0me, Benoit Tigeot, #2289)
6
+ * Prevent `NoMethodError` on Rails 4.2 when checking if a test is run
7
+ in transaction. (Geremia Taglialatela, #2480)
8
+
9
+ *Note* Rails 4.2 is only soft supported by the 4.x series of rspec-rails,
10
+ an exception was made here as it was a regression introduced by another
11
+ bug fix.
12
+
13
+ ### 4.1.1 / 2021-03-09
14
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.1.0...v4.1.1)
12
15
 
13
16
  Bug Fixes:
14
17
 
15
- * Restore previous conditional check for setting `default_url_options` in feature
16
- specs, prevents a `NoMethodError` in some scenarios. (Eugene Kenny, #2277)
17
- * Allow changing `ActiveJob::Base.queue_adapter` inside a system spec.
18
- (Jonathan Rochkind, #2242)
19
- * `rails generate generator` command now creates related spec file (Joel Azemar, #2217)
20
- * Relax upper `capybara` version constraint to allow for Capybara 3.x (Phil Pirozhkov, #2281)
21
- * Clear ActionMailer test mailbox after each example (Benoit Tigeot, #2293)
18
+ * Remove generated specs when destroying a generated controller.
19
+ (@Naokimi, #2475)
22
20
 
23
- ### 4.0.0.beta4
24
- [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.0.beta3...v4.0.0.beta4)
21
+ ### 4.1.0 / 2021-03-06
22
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.2...v4.1.0)
25
23
 
26
24
  Enhancements:
27
25
 
28
- * Add argument matcher support to `have_enqueued_*` matchers. (Phil Pirozhkov, #2206)
29
- * Switch generated templates to use ruby 1.9 hash keys. (Tanbir Hasan, #2224)
30
- * Add `have_been_performed`/`have_performed_job`/`perform_job` ActiveJob
31
- matchers (Isaac Seymour, #1785)
32
- * Default to generating request specs rather than controller specs when
33
- generating a controller (Luka Lüdicke, #2222)
26
+ * Issue a warning when using job matchers with `#at` mis-match on `usec` precision.
27
+ (Jon Rowe, #2350)
28
+ * Generated request specs now have a bare `_spec` suffix instead of `request_spec`.
29
+ (Eloy Espinaco, Luka Lüdicke, #2355, #2356, #2378)
30
+ * Generated scaffold now includes engine route helpers when inside a mountable engine.
31
+ (Andrew W. Lee, #2372)
32
+ * Improve request spec "controller" scafold when no action is specified.
33
+ (Thomas Hareau, #2399)
34
+ * Introduce testing snippets concept (Phil Pirozhkov, Benoit Tigeot, #2423)
35
+ * Prevent collisions with `let(:name)` for Rails 6.1 and `let(:method_name)` on older
36
+ Rails. (Benoit Tigeot, #2461)
37
+
38
+ ### 4.0.2 / 2020-12-26
39
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.1...v4.0.2)
34
40
 
35
41
  Bug Fixes:
36
42
 
37
- * Prevent `driven_by(:selenium)` being called due to hook precedence.
38
- (Takumi Shotoku, #2188)
39
- * Prevent a `WrongScopeError` being thrown during loading fixtures on Rails
40
- 6.1 development version. (Edouard Chin, #2215)
41
- * Fix Mocha mocking support with `should`. (Phil Pirozhkov, #2256)
43
+ * Indent all extra failure lines output from system specs. (Alex Robbin, #2321)
44
+ * Generated request spec for update now uses the correct let. (Paul Hanyzewski, #2344)
45
+ * Return `true`/`false` from predicate methods in config rather than raw values.
46
+ (Phil Pirozhkov, Jon Rowe, #2353, #2354)
47
+ * Remove old #fixture_path feature detection code which broke under newer Rails.
48
+ (Koen Punt, Jon Rowe, #2370)
49
+
50
+ ### 4.0.1 / 2020-05-16
51
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.0...v4.0.1)
52
+
53
+ Bug Fixes:
42
54
 
43
- ### 4.0.0.beta3
44
- [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.0.beta2...v4.0.0.beta3)
55
+ * Remove warning when calling `driven_by` in system specs. (Aubin Lorieux, #2302)
56
+ * Fix comparison of times for `#at` in job matchers. (Jon Rowe, Markus Doits, #2304)
57
+ * Allow `have_enqueued_mail` to match when a sub class of `ActionMailer::DeliveryJob`
58
+ is set using `<Class>.delivery_job=`. (Atsushi Yoshida #2305)
59
+ * Restore Ruby 2.2.x compatibility. (Jon Rowe, #2332)
60
+ * Add `required_ruby_version` to gem spec. (Marc-André Lafortune, #2319, #2338)
61
+
62
+ ### 4.0.0 / 2020-03-24
63
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v3.9.1...v4.0.0)
45
64
 
46
65
  Enhancements:
47
66
 
67
+ * Adds support for Rails 6. (Penelope Phippen, Benoit Tigeot, Jon Rowe, #2071)
48
68
  * Adds support for JRuby on Rails 5.2 and 6
49
69
  * Add support for parameterised mailers (Ignatius Reza, #2125)
50
70
  * Add ActionMailbox spec helpers and test type (James Dabbs, #2119)
@@ -55,28 +75,18 @@ Enhancements:
55
75
  * Improve path parsing in view specs render options. (John Hawthorn, #2115)
56
76
  * Add routing spec template as an option for generating controller specs.
57
77
  (David Revelo, #2134)
58
-
59
- Bug Fixes:
60
-
61
- * Replace `before_teardown` as well as `after_teardown` to ensure screenshots
62
- are generated correctly. (Jon Rowe, #2164)
63
- * `ActionView::FixtureResolver#hash` has been renamed to `ActionView::FixtureResolver#data`.
64
- (Penelope Phippen, #2076)
65
- * Add missing require for `have_enqueued_mail` matcher. (Ignatius Reza, #2117)
66
-
67
- ### 4.0.0.beta2
68
- [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.0.beta1...v4.0.0.beta2)
69
-
70
- Bug Fixes:
71
-
72
- * Fix version dependencies in gemspec.
73
-
74
- ### 4.0.0.beta1
75
- [Full Changelog](https://github.com/rspec/rspec-rails/compare/v3.9.0...v4.0.0.beta1)
76
-
77
- Enhancements:
78
-
79
- * Adds support for Rails 6. (Penelope Phippen, Benoit Tigeot, Jon Rowe, #2071)
78
+ * Add argument matcher support to `have_enqueued_*` matchers. (Phil Pirozhkov, #2206)
79
+ * Switch generated templates to use ruby 1.9 hash keys. (Tanbir Hasan, #2224)
80
+ * Add `have_been_performed`/`have_performed_job`/`perform_job` ActiveJob
81
+ matchers (Isaac Seymour, #1785)
82
+ * Default to generating request specs rather than controller specs when
83
+ generating a controller (Luka Lüdicke, #2222)
84
+ * Allow `ActiveJob` matchers `#on_queue` modifier to take symbolic queue names. (Nils Sommer, #2283)
85
+ * The scaffold generator now generates request specs in preference to controller specs.
86
+ (Luka Lüdicke, #2288)
87
+ * Add configuration option to disable ActiveRecord. (Jon Rowe, Phil Pirozhkov, Hermann Mayer, #2266)
88
+ * Set `ActionDispatch::SystemTesting::Server.silence_puma = true` when running system specs.
89
+ (ta1kt0me, Benoit Tigeot, #2289)
80
90
 
81
91
  Bug Fixes:
82
92
 
@@ -86,12 +96,35 @@ Bug Fixes:
86
96
  deprecated. (Pavel Rosický, #2092)
87
97
  * `ActionView::Template#formats` has been deprecated and replaced by
88
98
  `ActionView::Template#format`(Seb Jacobs, #2100)
99
+ * Replace `before_teardown` as well as `after_teardown` to ensure screenshots
100
+ are generated correctly. (Jon Rowe, #2164)
101
+ * `ActionView::FixtureResolver#hash` has been renamed to `ActionView::FixtureResolver#data`.
102
+ (Penelope Phippen, #2076)
103
+ * Prevent `driven_by(:selenium)` being called due to hook precedence.
104
+ (Takumi Shotoku, #2188)
105
+ * Prevent a `WrongScopeError` being thrown during loading fixtures on Rails
106
+ 6.1 development version. (Edouard Chin, #2215)
107
+ * Fix Mocha mocking support with `should`. (Phil Pirozhkov, #2256)
108
+ * Restore previous conditional check for setting `default_url_options` in feature
109
+ specs, prevents a `NoMethodError` in some scenarios. (Eugene Kenny, #2277)
110
+ * Allow changing `ActiveJob::Base.queue_adapter` inside a system spec.
111
+ (Jonathan Rochkind, #2242)
112
+ * `rails generate generator` command now creates related spec file (Joel Azemar, #2217)
113
+ * Relax upper `capybara` version constraint to allow for Capybara 3.x (Phil Pirozhkov, #2281)
114
+ * Clear ActionMailer test mailbox after each example (Benoit Tigeot, #2293)
89
115
 
90
116
  Breaking Changes:
91
117
 
92
118
  * Drops support for Rails below 5.0
93
119
  * Drops support for Ruby below 2.3
94
120
 
121
+ ### 3.9.1 / 2020-03-10
122
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.9.0...v3.9.1)
123
+
124
+ Bug Fixes:
125
+
126
+ * Add missing require for have_enqueued_mail matcher. (Ignatius Reza, #2117)
127
+
95
128
  ### 3.9.0 / 2019-10-08
96
129
  [Full Changelog](https://github.com/rspec/rspec-rails/compare/v3.8.3...v3.9.0)
97
130
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # rspec-rails [![Build Status][]][travis-ci] [![Code Climate][]][code-climate] [![Gem Version][]](gem-version)
1
+ # rspec-rails [![Code Climate][]][code-climate] [![Gem Version][]][gem-version]
2
2
 
3
3
  `rspec-rails` brings the [RSpec][] testing framework to [Ruby on Rails][]
4
4
  as a drop-in alternative to its default testing framework, Minitest.
@@ -8,9 +8,10 @@ They’re also specifications (or _specs,_ for short):
8
8
  detailed explanations of how the application is supposed to behave,
9
9
  expressed in plain English.
10
10
 
11
+ Use **[`rspec-rails` 3.x][]** for Rails earlier than 5.0.
11
12
  Use **[`rspec-rails` 1.x][]** for Rails 2.x.
12
13
 
13
- [Build Status]: https://secure.travis-ci.org/rspec/rspec-rails.svg?branch=master
14
+ [Build Status]: https://secure.travis-ci.org/rspec/rspec-rails.svg?branch=main
14
15
  [travis-ci]: https://travis-ci.org/rspec/rspec-rails
15
16
  [Code Climate]: https://codeclimate.com/github/rspec/rspec-rails.svg
16
17
  [code-climate]: https://codeclimate.com/github/rspec/rspec-rails
@@ -19,23 +20,27 @@ Use **[`rspec-rails` 1.x][]** for Rails 2.x.
19
20
  [RSpec]: https://rspec.info/
20
21
  [Ruby on Rails]: https://rubyonrails.org/
21
22
  [`rspec-rails` 1.x]: https://github.com/dchelimsky/rspec-rails
23
+ [`rspec-rails` 3.x]: https://github.com/rspec/rspec-rails/tree/3-9-maintenance
22
24
 
23
25
  ## Installation
24
26
 
27
+ **IMPORTANT** This README / branch refers to the `4.1.x` series of releases.
28
+ See the [`main` branch on Github](https://github.com/rspec/rspec-rails/tree/main) for more up to date releases.
29
+
25
30
  1. Add `rspec-rails` to **both** the `:development` and `:test` groups
26
31
  of your app’s `Gemfile`:
27
32
 
28
33
  ```ruby
29
34
  # Run against the latest stable release
30
35
  group :development, :test do
31
- gem 'rspec-rails', '~> 4.0'
36
+ gem 'rspec-rails', '~> 4.1.0'
32
37
  end
33
38
 
34
- # Or, run against the master branch
35
- # (requires master-branch versions of all related RSpec libraries)
39
+ # Or, run against the main branch
40
+ # (requires main-branch versions of all related RSpec libraries)
36
41
  group :development, :test do
37
42
  %w[rspec-core rspec-expectations rspec-mocks rspec-rails rspec-support].each do |lib|
38
- gem lib, git: "https://github.com/rspec/#{lib}.git", branch: 'master'
43
+ gem lib, git: "https://github.com/rspec/#{lib}.git", branch: 'main'
39
44
  end
40
45
  end
41
46
  ```
@@ -182,17 +187,17 @@ In addition to [the matchers that come standard in RSpec][],
182
187
  here are some extras that make it easier
183
188
  to test the various parts of a Rails system:
184
189
 
185
- | RSpec matcher | Delegates to | Available in | Notes |
186
- | ------------------------ | ----------------- | ------------------------------- | -------------------------------------------------------- |
187
- | [`be_a_new`][] | | all | primarily intended for controller specs |
188
- | [`render_template`][] | `assert_template` | request / controller / view | use with `expect(response).to` |
189
- | [`redirect_to`][] | `assert_redirect` | request / controller | use with `expect(response).to` |
190
- | [`route_to`] | `assert_routing` | routing / controller | replaces `route_for` from version 1.x |
191
- | [`be_routable`] | | routing / controller | usu. for `expect(...).not_to be_routable` |
192
- | [`have_http_status`][] | | request / controller / feature | |
193
- | [`match_array`][] | | all | for comparing arrays of ActiveRecord objects |
194
- | [`have_been_enqueued`][] | | all | requires config: `ActiveJob::Base.queue_adapter = :test` |
195
- | [`have_enqueued_job`][] | | all | requires config: `ActiveJob::Base.queue_adapter = :test` |
190
+ | RSpec matcher | Delegates to | Available in | Notes |
191
+ | ------------------------ | ------------------- | ------------------------------- | -------------------------------------------------------- |
192
+ | [`be_a_new`][] | | all | primarily intended for controller specs |
193
+ | [`render_template`][] | `assert_template` | request / controller / view | use with `expect(response).to` |
194
+ | [`redirect_to`][] | `assert_redirect` | request / controller | use with `expect(response).to` |
195
+ | [`route_to`] | `assert_recognizes` | routing / controller | use with `expect(...).to route_to` |
196
+ | [`be_routable`] | | routing / controller | use with `expect(...).not_to be_routable` |
197
+ | [`have_http_status`][] | | request / controller / feature | |
198
+ | [`match_array`][] | | all | for comparing arrays of ActiveRecord objects |
199
+ | [`have_been_enqueued`][] | | all | requires config: `ActiveJob::Base.queue_adapter = :test` |
200
+ | [`have_enqueued_job`][] | | all | requires config: `ActiveJob::Base.queue_adapter = :test` |
196
201
 
197
202
  Follow the links above for examples of how each matcher is used.
198
203
 
@@ -16,7 +16,7 @@ module Rspec
16
16
  return unless options[:request_specs]
17
17
 
18
18
  template 'request_spec.rb',
19
- File.join('spec/requests', class_path, "#{file_name}_request_spec.rb")
19
+ File.join('spec/requests', class_path, "#{file_name}_spec.rb")
20
20
  end
21
21
 
22
22
  def generate_controller_spec
@@ -27,7 +27,7 @@ module Rspec
27
27
  end
28
28
 
29
29
  def generate_view_specs
30
- return if actions.empty?
30
+ return if actions.empty? && behavior == :invoke
31
31
  return unless options[:view_specs] && options[:template_engine]
32
32
 
33
33
  empty_directory File.join("spec", "views", file_path)
@@ -1,7 +1,12 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:request) %> do
4
- <% namespaced_path = regular_class_path.join('/') %>
4
+ <% namespaced_path = regular_class_path.join('/') -%>
5
+ <% if actions.empty? -%>
6
+ describe "GET /index" do
7
+ pending "add some examples (or delete) #{__FILE__}"
8
+ end
9
+ <% end -%>
5
10
  <% for action in actions -%>
6
11
  describe "GET /<%= action %>" do
7
12
  it "returns http success" do
@@ -94,7 +94,7 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
94
94
  it "updates the requested <%= ns_file_name %>" do
95
95
  <%= file_name %> = <%= class_name %>.create! valid_attributes
96
96
  patch <%= show_helper.tr('@', '') %>,
97
- params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
97
+ params: { <%= singular_table_name %>: new_attributes }, headers: valid_headers, as: :json
98
98
  <%= file_name %>.reload
99
99
  skip("Add assertions for updated state")
100
100
  end
@@ -102,9 +102,9 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
102
102
  it "renders a JSON response with the <%= ns_file_name %>" do
103
103
  <%= file_name %> = <%= class_name %>.create! valid_attributes
104
104
  patch <%= show_helper.tr('@', '') %>,
105
- params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
105
+ params: { <%= singular_table_name %>: new_attributes }, headers: valid_headers, as: :json
106
106
  expect(response).to have_http_status(:ok)
107
- expect(response.content_type).to eq("application/json")
107
+ expect(response.content_type).to match(a_string_including("application/json"))
108
108
  end
109
109
  end
110
110
 
@@ -14,6 +14,10 @@
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
+
17
21
  # <%= class_name %>. As you add validations to <%= class_name %>, be sure to
18
22
  # adjust the attributes here as well.
19
23
  let(:valid_attributes) {
@@ -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
 
@@ -105,7 +106,41 @@ module RSpec
105
106
  end
106
107
 
107
108
  def render_views?
108
- rendering_views
109
+ rendering_views?
110
+ end
111
+
112
+ undef :rendering_views? if respond_to?(:rendering_views?)
113
+ def rendering_views?
114
+ !!rendering_views
115
+ end
116
+
117
+ # Define boolean predicates rather than relying on rspec-core due
118
+ # to the bug fix in rspec/rspec-core#2736, note some of these
119
+ # predicates are a bit nonsensical, but they exist for backwards
120
+ # compatibility, we can tidy these up in `rspec-rails` 5.
121
+ undef :fixture_path? if respond_to?(:fixture_path?)
122
+ def fixture_path?
123
+ !!fixture_path
124
+ end
125
+
126
+ undef :global_fixtures? if respond_to?(:global_fixtures?)
127
+ def global_fixtures?
128
+ !!global_fixtures
129
+ end
130
+
131
+ undef :infer_base_class_for_anonymous_controllers? if respond_to?(:infer_base_class_for_anonymous_controllers?)
132
+ def infer_base_class_for_anonymous_controllers?
133
+ !!infer_base_class_for_anonymous_controllers
134
+ end
135
+
136
+ undef :use_instantiated_fixtures? if respond_to?(:use_instantiated_fixtures?)
137
+ def use_instantiated_fixtures?
138
+ !!use_instantiated_fixtures
139
+ end
140
+
141
+ undef :use_transactional_fixtures? if respond_to?(:use_transactional_fixtures?)
142
+ def use_transactional_fixtures?
143
+ !!use_transactional_fixtures
109
144
  end
110
145
 
111
146
  def infer_spec_type_from_file_location!
@@ -156,3 +191,4 @@ module RSpec
156
191
  initialize_configuration RSpec.configuration
157
192
  end
158
193
  end
194
+ # rubocop: enable Metrics/ModuleLength
@@ -13,7 +13,7 @@ module RSpec
13
13
  def self.create_inbound_email(arg)
14
14
  case arg
15
15
  when Hash
16
- create_inbound_email_from_mail(arg)
16
+ create_inbound_email_from_mail(**arg)
17
17
  else
18
18
  create_inbound_email_from_source(arg.to_s)
19
19
  end
@@ -21,8 +21,8 @@ if defined?(ActionMailer)
21
21
 
22
22
  included do
23
23
  include ::Rails.application.routes.url_helpers
24
- options = ::Rails.configuration.action_mailer.default_url_options
25
- options&.each { |key, value| default_url_options[key] = value }
24
+ options = ::Rails.configuration.action_mailer.default_url_options || {}
25
+ options.each { |key, value| default_url_options[key] = value }
26
26
  end
27
27
 
28
28
  # Class-level DSL for mailer specs.
@@ -96,8 +96,8 @@ module RSpec
96
96
  end
97
97
  end
98
98
 
99
- def driven_by(*args, &blk)
100
- @driver = ::ActionDispatch::SystemTestCase.driven_by(*args, &blk).tap(&:use)
99
+ def driven_by(driver, **driver_options, &blk)
100
+ @driver = ::ActionDispatch::SystemTestCase.driven_by(driver, **driver_options, &blk).tap(&:use)
101
101
  end
102
102
 
103
103
  before do
@@ -114,7 +114,8 @@ module RSpec
114
114
  original_after_teardown.bind(self).call
115
115
  ensure
116
116
  myio = $stdout
117
- RSpec.current_example.metadata[:extra_failure_lines] = myio.string
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) && RSpec::Matchers.configuration.syntax.include?(:should) && defined?(ActiveRecord::Associations)
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
@@ -8,7 +8,12 @@ module RSpec
8
8
 
9
9
  def rails_fixture_file_wrapper
10
10
  RailsFixtureFileWrapper.fixture_path = nil
11
- resolved_fixture_path = (fixture_path || RSpec.configuration.fixture_path || '').to_s
11
+ resolved_fixture_path =
12
+ if respond_to?(:fixture_path) && !fixture_path.nil?
13
+ fixture_path.to_s
14
+ else
15
+ (RSpec.configuration.fixture_path || '').to_s
16
+ end
12
17
  RailsFixtureFileWrapper.fixture_path = File.join(resolved_fixture_path, '') unless resolved_fixture_path.strip.empty?
13
18
  RailsFixtureFileWrapper.instance
14
19
  end
@@ -17,22 +22,12 @@ module RSpec
17
22
  include ActionDispatch::TestProcess if defined?(ActionDispatch::TestProcess)
18
23
 
19
24
  class << self
20
- attr_reader :fixture_path
25
+ attr_accessor :fixture_path
21
26
 
22
27
  # Get instance of wrapper
23
28
  def instance
24
29
  @instance ||= new
25
30
  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
31
  end
37
32
  end
38
33
  end
@@ -9,6 +9,19 @@ 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
+ if ::Rails::VERSION::STRING > '5'
16
+ def run_in_transaction?
17
+ use_transactional_tests && !self.class.uses_transaction?(self)
18
+ end
19
+ else
20
+ def run_in_transaction?
21
+ use_transactional_fixtures && !self.class.uses_transaction?(self)
22
+ end
23
+ end
24
+
12
25
  included do
13
26
  if RSpec.configuration.use_active_record?
14
27
  include Fixtures
@@ -50,13 +63,6 @@ module RSpec
50
63
  end
51
64
  end
52
65
  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
66
  end
61
67
  end
62
68
  end
@@ -30,8 +30,12 @@ module RSpec
30
30
  self
31
31
  end
32
32
 
33
- def at(date)
34
- @at = date
33
+ def at(time_or_date)
34
+ case time_or_date
35
+ when Time then @at = Time.at(time_or_date.to_f)
36
+ else
37
+ @at = time_or_date
38
+ end
35
39
  self
36
40
  end
37
41
 
@@ -159,7 +163,29 @@ module RSpec
159
163
  return job[:at].nil? if @at == :no_wait
160
164
  return false unless job[:at]
161
165
 
162
- values_match?(@at, Time.at(job[:at]))
166
+ scheduled_at = Time.at(job[:at])
167
+ values_match?(@at, scheduled_at) || check_for_inprecise_value(scheduled_at)
168
+ end
169
+
170
+ def check_for_inprecise_value(scheduled_at)
171
+ return unless Time === @at && values_match?(@at.change(usec: 0), scheduled_at)
172
+
173
+ RSpec.warn_with((<<-WARNING).gsub(/^\s+\|/, '').chomp)
174
+ |[WARNING] Your expected `at(...)` value does not match the job scheduled_at value
175
+ |unless microseconds are removed. This precision error often occurs when checking
176
+ |values against `Time.current` / `Time.now` which have usec precision, but Rails
177
+ |uses `n.seconds.from_now` internally which has a usec count of `0`.
178
+ |
179
+ |Use `change(usec: 0)` to correct these values. For example:
180
+ |
181
+ |`Time.current.change(usec: 0)`
182
+ |
183
+ |Note: RSpec cannot do this for you because jobs can be scheduled with usec
184
+ |precision and we do not know wether it is on purpose or not.
185
+ |
186
+ |
187
+ WARNING
188
+ false
163
189
  end
164
190
 
165
191
  def set_expected_number(relativity, count)
@@ -131,15 +131,15 @@ module RSpec
131
131
  end
132
132
 
133
133
  def legacy_mail?(job)
134
- job[:job] == ActionMailer::DeliveryJob
134
+ job[:job] <= ActionMailer::DeliveryJob
135
135
  end
136
136
 
137
137
  def parameterized_mail?(job)
138
- RSpec::Rails::FeatureCheck.has_action_mailer_parameterized? && job[:job] == ActionMailer::Parameterized::DeliveryJob
138
+ RSpec::Rails::FeatureCheck.has_action_mailer_parameterized? && job[:job] <= ActionMailer::Parameterized::DeliveryJob
139
139
  end
140
140
 
141
141
  def unified_mail?(job)
142
- RSpec::Rails::FeatureCheck.has_action_mailer_unified_delivery? && job[:job] == ActionMailer::MailDeliveryJob
142
+ RSpec::Rails::FeatureCheck.has_action_mailer_unified_delivery? && job[:job] <= ActionMailer::MailDeliveryJob
143
143
  end
144
144
  end
145
145
  # @api public
@@ -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
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec Rails.
4
4
  module Version
5
5
  # Current version of RSpec Rails, in semantic versioning format.
6
- STRING = '4.0.0'
6
+ STRING = '4.1.2'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chelimsky
8
8
  - Andy Lindeman
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - |
@@ -44,7 +44,7 @@ cert_chain:
44
44
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
45
45
  F3MdtaDehhjC
46
46
  -----END CERTIFICATE-----
47
- date: 2020-03-24 00:00:00.000000000 Z
47
+ date: 2021-03-10 00:00:00.000000000 Z
48
48
  dependencies:
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: actionpack
@@ -94,70 +94,70 @@ dependencies:
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '3.9'
97
+ version: '3.10'
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.9'
104
+ version: '3.10'
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.9'
111
+ version: '3.10'
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.9'
118
+ version: '3.10'
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.9'
125
+ version: '3.10'
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.9'
132
+ version: '3.10'
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.9'
139
+ version: '3.10'
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.9'
146
+ version: '3.10'
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: ammeter
149
149
  requirement: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: 1.1.2
153
+ version: 1.1.5
154
154
  type: :development
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: 1.1.2
160
+ version: 1.1.5
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: aruba
163
163
  requirement: !ruby/object:Gem::Requirement
@@ -296,11 +296,11 @@ licenses:
296
296
  - MIT
297
297
  metadata:
298
298
  bug_tracker_uri: https://github.com/rspec/rspec-rails/issues
299
- changelog_uri: https://github.com/rspec/rspec-rails/blob/v4.0.0/Changelog.md
299
+ changelog_uri: https://github.com/rspec/rspec-rails/blob/v4.1.2/Changelog.md
300
300
  documentation_uri: https://rspec.info/documentation/
301
301
  mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
302
302
  source_code_uri: https://github.com/rspec/rspec-rails
303
- post_install_message:
303
+ post_install_message:
304
304
  rdoc_options:
305
305
  - "--charset=UTF-8"
306
306
  require_paths:
@@ -309,15 +309,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
309
309
  requirements:
310
310
  - - ">="
311
311
  - !ruby/object:Gem::Version
312
- version: '0'
312
+ version: 2.2.0
313
313
  required_rubygems_version: !ruby/object:Gem::Requirement
314
314
  requirements:
315
315
  - - ">="
316
316
  - !ruby/object:Gem::Version
317
317
  version: '0'
318
318
  requirements: []
319
- rubygems_version: 3.1.2
320
- signing_key:
319
+ rubygems_version: 3.2.4
320
+ signing_key:
321
321
  specification_version: 4
322
322
  summary: RSpec for Rails
323
323
  test_files: []
metadata.gz.sig CHANGED
Binary file