rspec-rails 3.5.0.beta3 → 3.5.0.beta4

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
  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