rspec-rails 3.5.0.beta3 → 3.5.0.beta4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd3e8920d7678a4b3f3686f66b288355451d1f8a
4
- data.tar.gz: c19188976968aaeb94a84db58fd1e983142b67c5
3
+ metadata.gz: fe6c556ed366e640bb5f0a4aa918fcc872020904
4
+ data.tar.gz: 1136962bda7a5bd265570b16bd51589e0f28156b
5
5
  SHA512:
6
- metadata.gz: eedacf89d9f499df4f5025fc0e00160bf13534fd24e3cf0cf7c99a9a882731607a3d6f6c78fd03868bda779aea55eaf7155d03152bd2007628b52bb90cb568bb
7
- data.tar.gz: 9b6cf8abb62ff3cb103441199ba88b0e26c990c3cb7ddb2446251376ed7efb17d4006f37f31b0b9bc448e60f6d7a4cf63363fbfb929bc906b7918ee91987914c
6
+ metadata.gz: bba5f656f01beb05846a821080d4124a8150e99a531bc9407982543ee93e6eef03c48a2d9430bf3169f1a466d4bd20837072d673ebcf4da0d3d01836ee08e97c
7
+ data.tar.gz: 0e9061fcd609bbdd7031bfe879e10b9c1001b5669fd5f0d5bf72e7229ec021202b2e2f53c466df2ccaa820090608216a443228a461c24e111069a9558691053a
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,20 +1,51 @@
1
- ### 3.5.0.development
2
- [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.5.0.beta3...master)
1
+ ### 3.5 development
2
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.5.0.beta4...master)
3
3
 
4
- ### 3.5.0.beta3 2016-04-02
5
- [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.5.0.beta1...v3.5.0.beta3)
4
+ ### 3.5.0.beta4 / 2016-06-05
5
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.5.0.beta3...v3.5.0.beta4)
6
6
 
7
7
  Enhancements:
8
+
9
+ * Add support for block when using `with` on `have_enqueued_job`. (John Schroeder, #1578)
10
+ * Add support for `file_fixture(...)`. (Wojciech Wnętrzak, #1587)
11
+ * Add support for `setup` and `teardown` with blocks (Miklós Fazekas, #1598)
12
+ * Add `enqueue_job ` alias for `have_enqueued_job`, support `once`/`twice`/
13
+ `thrice`, add `have_been_enqueued` matcher to support use without blocks.
14
+ (Sergey Alexandrovich, #1613)
15
+
16
+ Bug fixes:
17
+
18
+ * Prevent asset helpers from taking precendence over route helpers. (Prem Sichanugrist, #1496)
19
+ * Prevent `NoMethodError` during failed `have_rendered` assertions on weird templates.
20
+ (Jon Rowe, #1623).
21
+
22
+ ### 3.5.0.beta3 / 2016-04-02
23
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.5.0.beta2...v3.5.0.beta3)
24
+
25
+ Enhancements:
26
+
8
27
  * Add support for Rails 5 Beta 3 (Sam Phippen, Benjamin Quorning, Koen Punt, #1589, #1573)
9
28
 
10
- Bug fxes:
29
+ Bug fixes:
11
30
 
12
- * Make it possible to use floats in auto generated (scaffold) tests.
13
- (Alwahsh, #1550)
14
31
  * Support custom resolvers when preventing views from rendering.
15
32
  (Jon Rowe, Benjamin Quorning, #1580)
16
33
 
17
- ### 3.5.0.beta1 2016-02-06
34
+ ### 3.5.0.beta2 / 2016-03-10
35
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.5.0.beta1...v3.5.0.beta2)
36
+
37
+ Enhancements:
38
+
39
+ * Include `ActionDispatch::IntegrationTest::Behavior` in request spec
40
+ example groups when on Rails 5, allowing integration test helpers
41
+ to be used in request specs. (Scott Bronson, #1560)
42
+
43
+ Bug fixes:
44
+
45
+ * Make it possible to use floats in auto generated (scaffold) tests.
46
+ (Alwahsh, #1550)
47
+
48
+ ### 3.5.0.beta1 / 2016-02-06
18
49
  [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.4.2...v3.5.0.beta1)
19
50
 
20
51
  Enhancements:
@@ -32,6 +63,8 @@ Bug fixes:
32
63
  crashing with a `undefined method for nil:NilClass`. (Sam Phippen, #1501)
33
64
  * Expose path to view specs (Ryan Clark, Sarah Mei, Sam Phippen, #1402)
34
65
  * Prevent installing Rails 3.2.22.1 on Ruby 1.8.7. (Jon Rowe, #1540)
66
+ * Raise a clear error when `have_enqueued_job` is used with non-test
67
+ adapter. (Wojciech Wnętrzak, #1489)
35
68
 
36
69
  ### 3.4.2 / 2016-02-02
37
70
  [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.4.1...v3.4.2)
data/README.md CHANGED
@@ -11,7 +11,7 @@ Add `rspec-rails` to **both** the `:development` and `:test` groups in the
11
11
 
12
12
  ```ruby
13
13
  group :development, :test do
14
- gem 'rspec-rails', '~> 3.0'
14
+ gem 'rspec-rails', '~> 3.4'
15
15
  end
16
16
  ```
17
17
 
@@ -41,7 +41,11 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
41
41
  describe "GET #index" do
42
42
  it "assigns all <%= table_name.pluralize %> as @<%= table_name.pluralize %>" do
43
43
  <%= file_name %> = <%= class_name %>.create! valid_attributes
44
+ <% if RUBY_VERSION < '1.9.3' -%>
44
45
  get :index, {}, valid_session
46
+ <% else -%>
47
+ get :index, params: {}, session: valid_session
48
+ <% end -%>
45
49
  expect(assigns(:<%= table_name %>)).to eq([<%= file_name %>])
46
50
  end
47
51
  end
@@ -50,14 +54,22 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
50
54
  describe "GET #show" do
51
55
  it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
52
56
  <%= file_name %> = <%= class_name %>.create! valid_attributes
57
+ <% if RUBY_VERSION < '1.9.3' -%>
53
58
  get :show, {:id => <%= file_name %>.to_param}, valid_session
59
+ <% else -%>
60
+ get :show, params: {id: <%= file_name %>.to_param}, session: valid_session
61
+ <% end -%>
54
62
  expect(assigns(:<%= ns_file_name %>)).to eq(<%= file_name %>)
55
63
  end
56
64
  end
57
65
 
58
66
  describe "GET #new" do
59
67
  it "assigns a new <%= ns_file_name %> as @<%= ns_file_name %>" do
68
+ <% if RUBY_VERSION < '1.9.3' -%>
60
69
  get :new, {}, valid_session
70
+ <% else -%>
71
+ get :new, params: {}, session: valid_session
72
+ <% end -%>
61
73
  expect(assigns(:<%= ns_file_name %>)).to be_a_new(<%= class_name %>)
62
74
  end
63
75
  end
@@ -65,7 +77,11 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
65
77
  describe "GET #edit" do
66
78
  it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
67
79
  <%= file_name %> = <%= class_name %>.create! valid_attributes
80
+ <% if RUBY_VERSION < '1.9.3' -%>
68
81
  get :edit, {:id => <%= file_name %>.to_param}, valid_session
82
+ <% else -%>
83
+ get :edit, params: {id: <%= file_name %>.to_param}, session: valid_session
84
+ <% end -%>
69
85
  expect(assigns(:<%= ns_file_name %>)).to eq(<%= file_name %>)
70
86
  end
71
87
  end
@@ -74,30 +90,50 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
74
90
  context "with valid params" do
75
91
  it "creates a new <%= class_name %>" do
76
92
  expect {
93
+ <% if RUBY_VERSION < '1.9.3' -%>
77
94
  post :create, {:<%= ns_file_name %> => valid_attributes}, valid_session
95
+ <% else -%>
96
+ post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
97
+ <% end -%>
78
98
  }.to change(<%= class_name %>, :count).by(1)
79
99
  end
80
100
 
81
101
  it "assigns a newly created <%= ns_file_name %> as @<%= ns_file_name %>" do
102
+ <% if RUBY_VERSION < '1.9.3' -%>
82
103
  post :create, {:<%= ns_file_name %> => valid_attributes}, valid_session
104
+ <% else -%>
105
+ post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
106
+ <% end -%>
83
107
  expect(assigns(:<%= ns_file_name %>)).to be_a(<%= class_name %>)
84
108
  expect(assigns(:<%= ns_file_name %>)).to be_persisted
85
109
  end
86
110
 
87
111
  it "redirects to the created <%= ns_file_name %>" do
112
+ <% if RUBY_VERSION < '1.9.3' -%>
88
113
  post :create, {:<%= ns_file_name %> => valid_attributes}, valid_session
114
+ <% else -%>
115
+ post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
116
+ <% end -%>
89
117
  expect(response).to redirect_to(<%= class_name %>.last)
90
118
  end
91
119
  end
92
120
 
93
121
  context "with invalid params" do
94
122
  it "assigns a newly created but unsaved <%= ns_file_name %> as @<%= ns_file_name %>" do
123
+ <% if RUBY_VERSION < '1.9.3' -%>
95
124
  post :create, {:<%= ns_file_name %> => invalid_attributes}, valid_session
125
+ <% else -%>
126
+ post :create, params: {<%= ns_file_name %>: invalid_attributes}, session: valid_session
127
+ <% end -%>
96
128
  expect(assigns(:<%= ns_file_name %>)).to be_a_new(<%= class_name %>)
97
129
  end
98
130
 
99
131
  it "re-renders the 'new' template" do
132
+ <% if RUBY_VERSION < '1.9.3' -%>
100
133
  post :create, {:<%= ns_file_name %> => invalid_attributes}, valid_session
134
+ <% else -%>
135
+ post :create, params: {<%= ns_file_name %>: invalid_attributes}, session: valid_session
136
+ <% end -%>
101
137
  expect(response).to render_template("new")
102
138
  end
103
139
  end
@@ -111,20 +147,32 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
111
147
 
112
148
  it "updates the requested <%= ns_file_name %>" do
113
149
  <%= file_name %> = <%= class_name %>.create! valid_attributes
150
+ <% if RUBY_VERSION < '1.9.3' -%>
114
151
  put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => new_attributes}, valid_session
152
+ <% else -%>
153
+ put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: new_attributes}, session: valid_session
154
+ <% end -%>
115
155
  <%= file_name %>.reload
116
156
  skip("Add assertions for updated state")
117
157
  end
118
158
 
119
159
  it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
120
160
  <%= file_name %> = <%= class_name %>.create! valid_attributes
161
+ <% if RUBY_VERSION < '1.9.3' -%>
121
162
  put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => valid_attributes}, valid_session
163
+ <% else -%>
164
+ put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, session: valid_session
165
+ <% end -%>
122
166
  expect(assigns(:<%= ns_file_name %>)).to eq(<%= file_name %>)
123
167
  end
124
168
 
125
169
  it "redirects to the <%= ns_file_name %>" do
126
170
  <%= file_name %> = <%= class_name %>.create! valid_attributes
171
+ <% if RUBY_VERSION < '1.9.3' -%>
127
172
  put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => valid_attributes}, valid_session
173
+ <% else -%>
174
+ put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, session: valid_session
175
+ <% end -%>
128
176
  expect(response).to redirect_to(<%= file_name %>)
129
177
  end
130
178
  end
@@ -132,13 +180,21 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
132
180
  context "with invalid params" do
133
181
  it "assigns the <%= ns_file_name %> as @<%= ns_file_name %>" do
134
182
  <%= file_name %> = <%= class_name %>.create! valid_attributes
183
+ <% if RUBY_VERSION < '1.9.3' -%>
135
184
  put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => invalid_attributes}, valid_session
185
+ <% else -%>
186
+ put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, session: valid_session
187
+ <% end -%>
136
188
  expect(assigns(:<%= ns_file_name %>)).to eq(<%= file_name %>)
137
189
  end
138
190
 
139
191
  it "re-renders the 'edit' template" do
140
192
  <%= file_name %> = <%= class_name %>.create! valid_attributes
193
+ <% if RUBY_VERSION < '1.9.3' -%>
141
194
  put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => invalid_attributes}, valid_session
195
+ <% else -%>
196
+ put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, session: valid_session
197
+ <% end -%>
142
198
  expect(response).to render_template("edit")
143
199
  end
144
200
  end
@@ -148,13 +204,21 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
148
204
  it "destroys the requested <%= ns_file_name %>" do
149
205
  <%= file_name %> = <%= class_name %>.create! valid_attributes
150
206
  expect {
207
+ <% if RUBY_VERSION < '1.9.3' -%>
151
208
  delete :destroy, {:id => <%= file_name %>.to_param}, valid_session
209
+ <% else -%>
210
+ delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
211
+ <% end -%>
152
212
  }.to change(<%= class_name %>, :count).by(-1)
153
213
  end
154
214
 
155
215
  it "redirects to the <%= table_name %> list" do
156
216
  <%= file_name %> = <%= class_name %>.create! valid_attributes
217
+ <% if RUBY_VERSION < '1.9.3' -%>
157
218
  delete :destroy, {:id => <%= file_name %>.to_param}, valid_session
219
+ <% else -%>
220
+ delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
221
+ <% end -%>
158
222
  expect(response).to redirect_to(<%= index_helper %>_url)
159
223
  end
160
224
  end
@@ -1,3 +1,5 @@
1
+ # Explicitly require rspec-core for weird spring issue, see #1558
2
+ require 'rspec/core'
1
3
  require 'rspec/rails/feature_check'
2
4
 
3
5
  # Namespace for all core RSpec projects.
@@ -9,6 +9,7 @@ require 'rspec/rails/extensions'
9
9
  require 'rspec/rails/view_rendering'
10
10
  require 'rspec/rails/matchers'
11
11
  require 'rspec/rails/fixture_support'
12
+ require 'rspec/rails/file_fixture_support'
12
13
  require 'rspec/rails/example'
13
14
  require 'rspec/rails/vendor/capybara'
14
15
  require 'rspec/rails/configuration'
@@ -157,7 +157,7 @@ module RSpec
157
157
  module ClassMethods
158
158
  # Wraps `setup` calls from within Rails' testing framework in `before`
159
159
  # hooks.
160
- def setup(*methods)
160
+ def setup(*methods, &block)
161
161
  methods.each do |method|
162
162
  if method.to_s =~ /^setup_(with_controller|fixtures|controller_request_and_response)$/
163
163
  prepend_before { __send__ method }
@@ -165,14 +165,16 @@ module RSpec
165
165
  before { __send__ method }
166
166
  end
167
167
  end
168
+ before(&block) if block
168
169
  end
169
170
 
170
171
  # @api private
171
172
  #
172
173
  # Wraps `teardown` calls from within Rails' testing framework in
173
174
  # `after` hooks.
174
- def teardown(*methods)
175
+ def teardown(*methods, &block)
175
176
  methods.each { |method| after { __send__ method } }
177
+ after(&block) if block
176
178
  end
177
179
  end
178
180
 
@@ -50,6 +50,7 @@ module RSpec
50
50
  end
51
51
 
52
52
  # @private
53
+ # rubocop:disable Style/MethodLength
53
54
  def self.initialize_configuration(config)
54
55
  config.backtrace_exclusion_patterns << /vendor\//
55
56
  config.backtrace_exclusion_patterns << %r{lib/rspec/rails}
@@ -73,6 +74,10 @@ module RSpec
73
74
  # `RSpec::Rails::FixtureSupport` directly instead
74
75
  config.include RSpec::Rails::FixtureSupport
75
76
 
77
+ if ::Rails::VERSION::STRING > '5'
78
+ config.add_setting :file_fixture_path, :default => 'spec/fixtures/files'
79
+ config.include RSpec::Rails::FileFixtureSupport
80
+ end
76
81
  # This allows us to expose `render_views` as a config option even though it
77
82
  # breaks the convention of other options by using `render_views` as a
78
83
  # command (i.e. `render_views = true`), where it would normally be used
@@ -129,6 +134,7 @@ module RSpec
129
134
  config.include RSpec::Rails::JobExampleGroup, :type => :job
130
135
  end
131
136
  end
137
+ # rubocop:enable Style/MethodLength
132
138
 
133
139
  initialize_configuration RSpec.configuration
134
140
  end
@@ -31,6 +31,16 @@ module RSpec
31
31
 
32
32
  # DSL exposed to view specs.
33
33
  module ExampleMethods
34
+ extend ActiveSupport::Concern
35
+
36
+ included do
37
+ include ::Rails.application.routes.url_helpers
38
+
39
+ if ::Rails.application.routes.respond_to?(:mounted_helpers)
40
+ include ::Rails.application.routes.mounted_helpers
41
+ end
42
+ end
43
+
34
44
  # @overload render
35
45
  # @overload render({:partial => path_to_file})
36
46
  # @overload render({:partial => path_to_file}, {... locals ...})
@@ -47,6 +47,10 @@ module RSpec
47
47
  ::Rails::VERSION::STRING > '4.0'
48
48
  end
49
49
 
50
+ def has_file_fixture?
51
+ ::Rails::VERSION::STRING > '5.0'
52
+ end
53
+
50
54
  def type_metatag(type)
51
55
  if has_1_9_hash_syntax?
52
56
  "type: :#{type}"
@@ -0,0 +1,17 @@
1
+ if ::Rails::VERSION::STRING > '5'
2
+ require 'active_support/testing/file_fixtures'
3
+
4
+ module RSpec
5
+ module Rails
6
+ # @private
7
+ module FileFixtureSupport
8
+ extend ActiveSupport::Concern
9
+ include ActiveSupport::Testing::FileFixtures
10
+
11
+ included do
12
+ self.file_fixture_path = RSpec.configuration.file_fixture_path
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -8,36 +8,20 @@ module RSpec
8
8
  #
9
9
  # @api private
10
10
  module ActiveJob
11
+ # rubocop: disable Style/ClassLength
11
12
  # @private
12
- class HaveEnqueuedJob < RSpec::Matchers::BuiltIn::BaseMatcher
13
- def initialize(job)
14
- @job = job
13
+ class Base < RSpec::Matchers::BuiltIn::BaseMatcher
14
+ def initialize
15
15
  @args = []
16
16
  @queue = nil
17
17
  @at = nil
18
+ @block = Proc.new {}
18
19
  set_expected_number(:exactly, 1)
19
20
  end
20
21
 
21
- def matches?(proc)
22
- raise ArgumentError, "have_enqueued_jobs only supports block expectations" unless Proc === proc
23
-
24
- original_enqueued_jobs_count = queue_adapter.enqueued_jobs.count
25
- proc.call
26
- in_block_jobs = queue_adapter.enqueued_jobs.drop(original_enqueued_jobs_count)
27
-
28
- @matching_jobs_count = in_block_jobs.count do |job|
29
- serialized_attributes.all? { |key, value| value == job[key] }
30
- end
31
-
32
- case @expectation_type
33
- when :exactly then @expected_number == @matching_jobs_count
34
- when :at_most then @expected_number >= @matching_jobs_count
35
- when :at_least then @expected_number <= @matching_jobs_count
36
- end
37
- end
38
-
39
- def with(*args)
22
+ def with(*args, &block)
40
23
  @args = args
24
+ @block = block if block.present?
41
25
  self
42
26
  end
43
27
 
@@ -70,6 +54,18 @@ module RSpec
70
54
  self
71
55
  end
72
56
 
57
+ def once
58
+ exactly(:once)
59
+ end
60
+
61
+ def twice
62
+ exactly(:twice)
63
+ end
64
+
65
+ def thrice
66
+ exactly(:thrice)
67
+ end
68
+
73
69
  def failure_message
74
70
  "expected to enqueue #{base_message}"
75
71
  end
@@ -92,6 +88,23 @@ module RSpec
92
88
 
93
89
  private
94
90
 
91
+ def check(jobs)
92
+ @matching_jobs_count = jobs.count do |job|
93
+ if serialized_attributes.all? { |key, value| value == job[key] }
94
+ @block.call(*job[:args])
95
+ true
96
+ else
97
+ false
98
+ end
99
+ end
100
+
101
+ case @expectation_type
102
+ when :exactly then @expected_number == @matching_jobs_count
103
+ when :at_most then @expected_number >= @matching_jobs_count
104
+ when :at_least then @expected_number <= @matching_jobs_count
105
+ end
106
+ end
107
+
95
108
  def base_message
96
109
  "#{message_expectation_modifier} #{@expected_number} jobs,".tap do |msg|
97
110
  msg << " with #{@args}," if @args.any?
@@ -124,25 +137,55 @@ module RSpec
124
137
  ::ActiveJob::Base.queue_adapter
125
138
  end
126
139
  end
140
+ # rubocop: enable Style/ClassLength
141
+
142
+ # @private
143
+ class HaveEnqueuedJob < Base
144
+ def initialize(job)
145
+ super()
146
+ @job = job
147
+ end
148
+
149
+ def matches?(proc)
150
+ raise ArgumentError, "have_enqueued_job and enqueue_job only support block expectations" unless Proc === proc
151
+
152
+ original_enqueued_jobs_count = queue_adapter.enqueued_jobs.count
153
+ proc.call
154
+ in_block_jobs = queue_adapter.enqueued_jobs.drop(original_enqueued_jobs_count)
155
+
156
+ check(in_block_jobs)
157
+ end
158
+ end
159
+
160
+ # @private
161
+ class HaveBeenEnqueued < Base
162
+ def matches?(job)
163
+ @job = job
164
+ check(queue_adapter.enqueued_jobs)
165
+ end
166
+ end
127
167
  end
128
168
 
129
169
  # @api public
130
- # Passess if `count` of jobs were enqueued inside block
170
+ # Passes if a job has been enqueued inside block. May chain at_least, at_most or exactly to specify a number of times.
131
171
  #
132
172
  # @example
133
173
  # expect {
134
174
  # HeavyLiftingJob.perform_later
135
175
  # }.to have_enqueued_job
136
176
  #
177
+ # # Using alias
178
+ # expect {
179
+ # HeavyLiftingJob.perform_later
180
+ # }.to enqueue_job
181
+ #
137
182
  # expect {
138
183
  # HelloJob.perform_later
139
184
  # HeavyLiftingJob.perform_later
140
185
  # }.to have_enqueued_job(HelloJob).exactly(:once)
141
186
  #
142
187
  # expect {
143
- # HelloJob.perform_later
144
- # HelloJob.perform_later
145
- # HelloJob.perform_later
188
+ # 3.times { HelloJob.perform_later }
146
189
  # }.to have_enqueued_job(HelloJob).at_least(2).times
147
190
  #
148
191
  # expect {
@@ -158,11 +201,49 @@ module RSpec
158
201
  # HelloJob.set(wait_until: Date.tomorrow.noon, queue: "low").perform_later(42)
159
202
  # }.to have_enqueued_job.with(42).on_queue("low").at(Date.tomorrow.noon)
160
203
  def have_enqueued_job(job = nil)
161
- unless ::ActiveJob::QueueAdapters::TestAdapter === ::ActiveJob::Base.queue_adapter
162
- raise StandardError, "To use have_enqueued_job matcher set `ActiveJob::Base.queue_adapter = :test`"
163
- end
204
+ check_active_job_adapter
164
205
  ActiveJob::HaveEnqueuedJob.new(job)
165
206
  end
207
+ alias_method :enqueue_job, :have_enqueued_job
208
+
209
+ # @api public
210
+ # Passes if a job has been enqueued. May chain at_least, at_most or exactly to specify a number of times.
211
+ #
212
+ # @example
213
+ # before { ActiveJob::Base.queue_adapter.enqueued_jobs.clear }
214
+ #
215
+ # HeavyLiftingJob.perform_later
216
+ # expect(HeavyLiftingJob).to have_been_enqueued
217
+ #
218
+ # HelloJob.perform_later
219
+ # HeavyLiftingJob.perform_later
220
+ # expect(HeavyLiftingJob).to have_been_enqueued.exactly(:once)
221
+ #
222
+ # 3.times { HelloJob.perform_later }
223
+ # expect(HelloJob).to have_been_enqueued.at_least(2).times
224
+ #
225
+ # HelloJob.perform_later
226
+ # expect(HelloJob).to enqueue_job(HelloJob).at_most(:twice)
227
+ #
228
+ # HelloJob.perform_later
229
+ # HeavyLiftingJob.perform_later
230
+ # expect(HelloJob).to have_been_enqueued
231
+ # expect(HeavyLiftingJob).to have_been_enqueued
232
+ #
233
+ # HelloJob.set(wait_until: Date.tomorrow.noon, queue: "low").perform_later(42)
234
+ # expect(HelloJob).to have_been_enqueued.with(42).on_queue("low").at(Date.tomorrow.noon)
235
+ def have_been_enqueued
236
+ check_active_job_adapter
237
+ ActiveJob::HaveBeenEnqueued.new
238
+ end
239
+
240
+ private
241
+
242
+ # @private
243
+ def check_active_job_adapter
244
+ return if ::ActiveJob::QueueAdapters::TestAdapter === ::ActiveJob::Base.queue_adapter
245
+ raise StandardError, "To use ActiveJob matchers set `ActiveJob::Base.queue_adapter = :test`"
246
+ end
166
247
  end
167
248
  end
168
249
  end
@@ -35,8 +35,8 @@ module RSpec
35
35
  # @api private
36
36
  def failure_message
37
37
  if @redirect_is
38
- rescued_exception.message[/.* but /] +
39
- "was a redirect to <#{@redirect_is}>"
38
+ rescued_exception.message[/(.*?)( but|$)/, 1] +
39
+ " but was a redirect to <#{@redirect_is}>"
40
40
  else
41
41
  rescued_exception.message
42
42
  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 = '3.5.0.beta3'
6
+ STRING = '3.5.0.beta4'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0.beta3
4
+ version: 3.5.0.beta4
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: 2016-04-02 00:00:00.000000000 Z
47
+ date: 2016-06-05 00:00:00.000000000 Z
48
48
  dependencies:
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: activesupport
@@ -94,56 +94,56 @@ dependencies:
94
94
  requirements:
95
95
  - - '='
96
96
  - !ruby/object:Gem::Version
97
- version: 3.5.0.beta3
97
+ version: 3.5.0.beta4
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.5.0.beta3
104
+ version: 3.5.0.beta4
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.5.0.beta3
111
+ version: 3.5.0.beta4
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.5.0.beta3
118
+ version: 3.5.0.beta4
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.5.0.beta3
125
+ version: 3.5.0.beta4
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.5.0.beta3
132
+ version: 3.5.0.beta4
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.5.0.beta3
139
+ version: 3.5.0.beta4
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.5.0.beta3
146
+ version: 3.5.0.beta4
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: cucumber
149
149
  requirement: !ruby/object:Gem::Requirement
@@ -251,6 +251,7 @@ files:
251
251
  - lib/rspec/rails/extensions.rb
252
252
  - lib/rspec/rails/extensions/active_record/proxy.rb
253
253
  - lib/rspec/rails/feature_check.rb
254
+ - lib/rspec/rails/file_fixture_support.rb
254
255
  - lib/rspec/rails/fixture_support.rb
255
256
  - lib/rspec/rails/matchers.rb
256
257
  - lib/rspec/rails/matchers/active_job.rb
@@ -290,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
291
  version: 1.3.1
291
292
  requirements: []
292
293
  rubyforge_project:
293
- rubygems_version: 2.4.5.1
294
+ rubygems_version: 2.2.2
294
295
  signing_key:
295
296
  specification_version: 4
296
297
  summary: RSpec for Rails
metadata.gz.sig CHANGED
Binary file