rspec-rails 4.0.0.beta4 → 4.0.0.rc1
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.tar.gz.sig +0 -0
- data/Capybara.md +5 -54
- data/Changelog.md +19 -0
- data/README.md +1 -1
- data/lib/generators/rspec/{generators → generator}/generator_generator.rb +2 -2
- data/lib/generators/rspec/{generators → generator}/templates/generator_spec.rb +0 -0
- data/lib/generators/rspec/install/templates/spec/rails_helper.rb +15 -1
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +18 -10
- data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
- data/lib/generators/rspec/scaffold/templates/request_spec.rb +133 -0
- data/lib/rspec-rails.rb +2 -2
- data/lib/rspec/rails/adapters.rb +3 -3
- data/lib/rspec/rails/configuration.rb +2 -3
- data/lib/rspec/rails/example/channel_example_group.rb +2 -2
- data/lib/rspec/rails/example/feature_example_group.rb +5 -23
- data/lib/rspec/rails/example/system_example_group.rb +0 -1
- data/lib/rspec/rails/example/view_example_group.rb +1 -1
- data/lib/rspec/rails/fixture_support.rb +33 -22
- data/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +3 -3
- data/lib/rspec/rails/matchers/active_job.rb +2 -2
- data/lib/rspec/rails/matchers/have_enqueued_mail.rb +1 -1
- data/lib/rspec/rails/matchers/routing_matchers.rb +2 -2
- data/lib/rspec/rails/tasks/rspec.rake +4 -4
- data/lib/rspec/rails/vendor/capybara.rb +0 -5
- data/lib/rspec/rails/version.rb +1 -1
- metadata +15 -13
- 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: 2cf0a532366cef497e1b49006e7091da23b57071c1c4748b91dc7e4fb1f1b382
|
4
|
+
data.tar.gz: 8ae957b352b26a7bec08b5c07aab62906d662996aba06398d19f036016b09477
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9992d5aea4659d31b69b48e741c87d50deb3df2151bef86adb6084a3b6feb421d20408d52b0157481dce4e9b0aef31ebdeacfa71efdb97bedc26f7f310f211e
|
7
|
+
data.tar.gz: f6f524c072df299e3566abcb99d603eafefe8edc47440bc13e31fa87cf84a2f325c7cd8519eeecedf8cee4c647cbbdccac806e1cc905f9c6068b38a84bfbf025
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Capybara.md
CHANGED
@@ -1,58 +1,19 @@
|
|
1
1
|
rspec-rails supports integration with Capybara out of the box by adding
|
2
2
|
its Capybara::DSL (visit/page) and Capybara::RSpecMatchers to the
|
3
|
-
examples in the applicable directories
|
4
|
-
Capybara 1.x and Capybara >= 2.x.
|
3
|
+
examples in the applicable directories.
|
5
4
|
|
6
5
|
## Capybara::DSL
|
7
6
|
|
8
7
|
Adds the `visit` and `page` methods, which work together to simulate a
|
9
8
|
GET request and provide access to the result (via `page`).
|
10
9
|
|
11
|
-
## Capybara::RSpecMatchers
|
12
|
-
|
13
|
-
Exposes matchers used to specify expected HTML content (e.g. `should_not have_selector` will work correctly).
|
14
|
-
|
15
|
-
## Capybara 1.x
|
16
|
-
|
17
|
-
Capybara::DSL is added to examples in:
|
18
|
-
|
19
|
-
* spec/requests # included by Capybara
|
20
|
-
* spec/controllers
|
21
|
-
|
22
|
-
Capybara::RSpecMatchers is added to examples in:
|
23
|
-
|
24
|
-
* spec/requests # included by Capybara
|
25
|
-
* spec/controllers
|
26
|
-
* spec/views
|
27
|
-
* spec/helpers
|
28
|
-
* spec/mailers
|
29
|
-
|
30
|
-
## Capybara 2.0
|
31
|
-
|
32
|
-
To use Capybara 2.0, you need rspec-rails-2.11.1 or greater.
|
33
|
-
|
34
10
|
Capybara::DSL is added to examples in:
|
35
11
|
|
36
12
|
* spec/features
|
37
13
|
|
38
|
-
Capybara::RSpecMatchers
|
39
|
-
|
40
|
-
* spec/features
|
41
|
-
* spec/controllers
|
42
|
-
* spec/views
|
43
|
-
* spec/helpers
|
44
|
-
* spec/mailers
|
45
|
-
|
46
|
-
## Upgrading to Capybara-2.0
|
47
|
-
|
48
|
-
Many users have been confused by the co-existence of the the
|
49
|
-
Capybara::DSL (visit/page) alongside the rack-test DSL
|
50
|
-
(get|post|put|delete|head/response.body) in examples in spec/requests
|
51
|
-
and spec/controllers. As of rspec-rails-2.11.1 and capybara-2.0.0.beta2, these
|
52
|
-
are separated as follows:
|
14
|
+
## Capybara::RSpecMatchers
|
53
15
|
|
54
|
-
|
55
|
-
* rack-test DSL is included in `spec/requests` and `spec/controllers`
|
16
|
+
Exposes matchers used to specify expected HTML content (e.g. `should_not have_selector` will work correctly).
|
56
17
|
|
57
18
|
Capybara::RSpecMatchers is added to examples in:
|
58
19
|
|
@@ -62,16 +23,6 @@ Capybara::RSpecMatchers is added to examples in:
|
|
62
23
|
* spec/helpers
|
63
24
|
* spec/mailers
|
64
25
|
|
65
|
-
|
66
|
-
spec/requests you'll want to move those examples to spec/features and
|
67
|
-
they should just work.
|
68
|
-
|
69
|
-
If you want to leave those examples in spec/requests, you can include
|
70
|
-
Capybara::DSL in those examples yourself as follows, but this is
|
71
|
-
absolutely not recommended as you will be overriding the intended
|
72
|
-
behavior and accepting the risks associated with doing so:
|
26
|
+
## Upgrading to Capybara-3.x
|
73
27
|
|
74
|
-
|
75
|
-
RSpec.configure do |c|
|
76
|
-
c.include Capybara::DSL, file_path: "spec/requests"
|
77
|
-
end
|
28
|
+
Consult the official [Upgrading from Capybara 2.x to 3.x](https://github.com/teamcapybara/capybara/blob/master/UPGRADING.md#upgrading-from-capybara-2x-to-3x) guide.
|
data/Changelog.md
CHANGED
@@ -1,3 +1,22 @@
|
|
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)
|
3
|
+
|
4
|
+
Enhancements:
|
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
|
+
|
11
|
+
Bug Fixes:
|
12
|
+
|
13
|
+
* Restore previous conditional check for setting `default_url_options` in feature
|
14
|
+
specs, prevents a `NoMethodError` in some scenarios. (Eugene Kenny, #2277)
|
15
|
+
* Allow changing `ActiveJob::Base.queue_adapter` inside a system spec.
|
16
|
+
(Jonathan Rochkind, #2242)
|
17
|
+
* `rails generate generator` command now creates related spec file (Joel Azemar, #2217)
|
18
|
+
* Relax upper `capybara` version constraint to allow for Capybara 3.x (Phil Pirozhkov, #2281)
|
19
|
+
|
1
20
|
### 4.0.0.beta4
|
2
21
|
[Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.0.0.beta3...v4.0.0.beta4)
|
3
22
|
|
data/README.md
CHANGED
@@ -361,7 +361,7 @@ you can run the specs and Cucumber features, or submit a pull request.
|
|
361
361
|
### Recommended third-party extensions
|
362
362
|
|
363
363
|
* [FactoryBot](https://github.com/thoughtbot/factory_bot)
|
364
|
-
* [Capybara](https://github.com/
|
364
|
+
* [Capybara](https://github.com/teamcapybara/capybara)
|
365
365
|
(Included by default in Rails 5.1+.
|
366
366
|
Note that [additional configuration is required][] to use the Capybara DSL
|
367
367
|
anywhere other than system specs and feature specs.)
|
@@ -3,8 +3,8 @@ require 'generators/rspec'
|
|
3
3
|
module Rspec
|
4
4
|
module Generators
|
5
5
|
# @private
|
6
|
-
class
|
7
|
-
class_option :generator_specs, type: :boolean, default:
|
6
|
+
class GeneratorGenerator < Base
|
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]
|
File without changes
|
@@ -20,7 +20,7 @@ require 'rspec/rails'
|
|
20
20
|
# directory. Alternatively, in the individual `*_spec.rb` files, manually
|
21
21
|
# require only the support files necessary.
|
22
22
|
#
|
23
|
-
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
|
23
|
+
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
|
24
24
|
|
25
25
|
<% if RSpec::Rails::FeatureCheck.has_active_record_migration? -%>
|
26
26
|
# Checks for pending migrations and applies them before tests are run.
|
@@ -42,6 +42,20 @@ RSpec.configure do |config|
|
|
42
42
|
# instead of true.
|
43
43
|
config.use_transactional_fixtures = true
|
44
44
|
|
45
|
+
# You can uncomment this line to turn off ActiveRecord support entirely.
|
46
|
+
# config.use_active_record = false
|
47
|
+
|
48
|
+
<% else -%>
|
49
|
+
# Remove this line to enable support for ActiveRecord
|
50
|
+
config.use_active_record = false
|
51
|
+
|
52
|
+
# If you enable ActiveRecord support you should unncomment these lines,
|
53
|
+
# note if you'd prefer not to run each example within a transaction, you
|
54
|
+
# should set use_transactional_fixtures to false.
|
55
|
+
#
|
56
|
+
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
57
|
+
# config.use_transactional_fixtures = true
|
58
|
+
|
45
59
|
<% end -%>
|
46
60
|
# RSpec Rails can automatically mix in different behaviours to your tests
|
47
61
|
# based on their file location, for example enabling you to call `get` and
|
@@ -14,7 +14,8 @@ module Rspec
|
|
14
14
|
class_option :singleton, type: :boolean, desc: "Supply to create a singleton controller"
|
15
15
|
class_option :api, type: :boolean, desc: "Skip specs unnecessary for API-only apps"
|
16
16
|
|
17
|
-
class_option :controller_specs, type: :boolean, default:
|
17
|
+
class_option :controller_specs, type: :boolean, default: false, desc: "Generate controller specs"
|
18
|
+
class_option :request_specs, type: :boolean, default: true, desc: "Generate request specs"
|
18
19
|
class_option :view_specs, type: :boolean, default: true, desc: "Generate view specs"
|
19
20
|
class_option :helper_specs, type: :boolean, default: true, desc: "Generate helper specs"
|
20
21
|
class_option :routing_specs, type: :boolean, default: true, desc: "Generate routing specs"
|
@@ -27,15 +28,20 @@ module Rspec
|
|
27
28
|
def generate_controller_spec
|
28
29
|
return unless options[:controller_specs]
|
29
30
|
|
30
|
-
template_file = File.join(
|
31
|
-
'spec/controllers',
|
32
|
-
controller_class_path,
|
33
|
-
"#{controller_file_name}_controller_spec.rb"
|
34
|
-
)
|
35
31
|
if options[:api]
|
36
|
-
template 'api_controller_spec.rb', template_file
|
32
|
+
template 'api_controller_spec.rb', template_file(folder: 'controllers', suffix: '_controller')
|
33
|
+
else
|
34
|
+
template 'controller_spec.rb', template_file(folder: 'controllers', suffix: '_controller')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_request_spec
|
39
|
+
return unless options[:request_specs]
|
40
|
+
|
41
|
+
if options[:api]
|
42
|
+
template 'api_request_spec.rb', template_file(folder: 'requests')
|
37
43
|
else
|
38
|
-
template '
|
44
|
+
template 'request_spec.rb', template_file(folder: 'requests')
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
@@ -60,8 +66,6 @@ module Rspec
|
|
60
66
|
template 'routing_spec.rb', template_file
|
61
67
|
end
|
62
68
|
|
63
|
-
hook_for :integration_tool, as: :integration
|
64
|
-
|
65
69
|
protected
|
66
70
|
|
67
71
|
attr_reader :generator_args
|
@@ -116,6 +120,10 @@ module Rspec
|
|
116
120
|
end
|
117
121
|
end
|
118
122
|
|
123
|
+
def template_file(folder:, suffix: '')
|
124
|
+
File.join('spec', folder, controller_class_path, "#{controller_file_name}#{suffix}_spec.rb")
|
125
|
+
end
|
126
|
+
|
119
127
|
def banner
|
120
128
|
self.class.banner
|
121
129
|
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
4
|
+
# It demonstrates how one might use RSpec to test the controller code that
|
5
|
+
# was generated by Rails when you ran the scaffold generator.
|
6
|
+
#
|
7
|
+
# It assumes that the implementation code is generated by the rails scaffold
|
8
|
+
# generator. If you are using any extension libraries to generate different
|
9
|
+
# controller code, this generated spec may or may not pass.
|
10
|
+
#
|
11
|
+
# It only uses APIs available in rails and/or rspec-rails. There are a number
|
12
|
+
# of tools you can use to make these specs even more expressive, but we're
|
13
|
+
# sticking to rails and rspec-rails APIs to keep things simple and stable.
|
14
|
+
|
15
|
+
<% module_namespacing do -%>
|
16
|
+
RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %> do
|
17
|
+
# This should return the minimal set of attributes required to create a valid
|
18
|
+
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to
|
19
|
+
# adjust the attributes here as well.
|
20
|
+
let(:valid_attributes) {
|
21
|
+
skip("Add a hash of attributes valid for your model")
|
22
|
+
}
|
23
|
+
|
24
|
+
let(:invalid_attributes) {
|
25
|
+
skip("Add a hash of attributes invalid for your model")
|
26
|
+
}
|
27
|
+
|
28
|
+
# This should return the minimal set of values that should be in the headers
|
29
|
+
# in order to pass any filters (e.g. authentication) defined in
|
30
|
+
# <%= controller_class_name %>Controller, or in your router and rack
|
31
|
+
# middleware. Be sure to keep this updated too.
|
32
|
+
let(:valid_headers) {
|
33
|
+
{}
|
34
|
+
}
|
35
|
+
|
36
|
+
<% unless options[:singleton] -%>
|
37
|
+
describe "GET /index" do
|
38
|
+
it "renders a successful response" do
|
39
|
+
<%= class_name %>.create! valid_attributes
|
40
|
+
get <%= index_helper %>_url, headers: valid_headers, as: :json
|
41
|
+
expect(response).to be_successful
|
42
|
+
end
|
43
|
+
end
|
44
|
+
<% end -%>
|
45
|
+
|
46
|
+
describe "GET /show" do
|
47
|
+
it "renders a successful response" do
|
48
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
49
|
+
get <%= show_helper.tr('@', '') %>, as: :json
|
50
|
+
expect(response).to be_successful
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "POST /create" do
|
55
|
+
context "with valid parameters" do
|
56
|
+
it "creates a new <%= class_name %>" do
|
57
|
+
expect {
|
58
|
+
post <%= index_helper %>_url,
|
59
|
+
params: { <%= ns_file_name %>: valid_attributes }, headers: valid_headers, as: :json
|
60
|
+
}.to change(<%= class_name %>, :count).by(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "renders a JSON response with the new <%= ns_file_name %>" do
|
64
|
+
post <%= index_helper %>_url,
|
65
|
+
params: { <%= ns_file_name %>: valid_attributes }, headers: valid_headers, as: :json
|
66
|
+
expect(response).to have_http_status(:created)
|
67
|
+
expect(response.content_type).to match(a_string_including("application/json"))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with invalid parameters" do
|
72
|
+
it "does not create a new <%= class_name %>" do
|
73
|
+
expect {
|
74
|
+
post <%= index_helper %>_url,
|
75
|
+
params: { <%= ns_file_name %>: invalid_attributes }, as: :json
|
76
|
+
}.to change(<%= class_name %>, :count).by(0)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "renders a JSON response with errors for the new <%= ns_file_name %>" do
|
80
|
+
post <%= index_helper %>_url,
|
81
|
+
params: { <%= ns_file_name %>: invalid_attributes }, headers: valid_headers, as: :json
|
82
|
+
expect(response).to have_http_status(:unprocessable_entity)
|
83
|
+
expect(response.content_type).to eq("application/json")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "PATCH /update" do
|
89
|
+
context "with valid parameters" do
|
90
|
+
let(:new_attributes) {
|
91
|
+
skip("Add a hash of attributes valid for your model")
|
92
|
+
}
|
93
|
+
|
94
|
+
it "updates the requested <%= ns_file_name %>" do
|
95
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
96
|
+
patch <%= show_helper.tr('@', '') %>,
|
97
|
+
params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
|
98
|
+
<%= file_name %>.reload
|
99
|
+
skip("Add assertions for updated state")
|
100
|
+
end
|
101
|
+
|
102
|
+
it "renders a JSON response with the <%= ns_file_name %>" do
|
103
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
104
|
+
patch <%= show_helper.tr('@', '') %>,
|
105
|
+
params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
|
106
|
+
expect(response).to have_http_status(:ok)
|
107
|
+
expect(response.content_type).to eq("application/json")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "with invalid parameters" do
|
112
|
+
it "renders a JSON response with errors for the <%= ns_file_name %>" do
|
113
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
114
|
+
patch <%= show_helper.tr('@', '') %>,
|
115
|
+
params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
|
116
|
+
expect(response).to have_http_status(:unprocessable_entity)
|
117
|
+
expect(response.content_type).to eq("application/json")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "DELETE /destroy" do
|
123
|
+
it "destroys the requested <%= ns_file_name %>" do
|
124
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
125
|
+
expect {
|
126
|
+
delete <%= show_helper.tr('@', '') %>, headers: valid_headers, as: :json
|
127
|
+
}.to change(<%= class_name %>, :count).by(-1)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
<% end -%>
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
4
|
+
# It demonstrates how one might use RSpec to test the controller code that
|
5
|
+
# was generated by Rails when you ran the scaffold generator.
|
6
|
+
#
|
7
|
+
# It assumes that the implementation code is generated by the rails scaffold
|
8
|
+
# generator. If you are using any extension libraries to generate different
|
9
|
+
# controller code, this generated spec may or may not pass.
|
10
|
+
#
|
11
|
+
# It only uses APIs available in rails and/or rspec-rails. There are a number
|
12
|
+
# of tools you can use to make these specs even more expressive, but we're
|
13
|
+
# sticking to rails and rspec-rails APIs to keep things simple and stable.
|
14
|
+
|
15
|
+
<% module_namespacing do -%>
|
16
|
+
RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %> do
|
17
|
+
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to
|
18
|
+
# adjust the attributes here as well.
|
19
|
+
let(:valid_attributes) {
|
20
|
+
skip("Add a hash of attributes valid for your model")
|
21
|
+
}
|
22
|
+
|
23
|
+
let(:invalid_attributes) {
|
24
|
+
skip("Add a hash of attributes invalid for your model")
|
25
|
+
}
|
26
|
+
|
27
|
+
<% unless options[:singleton] -%>
|
28
|
+
describe "GET /index" do
|
29
|
+
it "renders a successful response" do
|
30
|
+
<%= class_name %>.create! valid_attributes
|
31
|
+
get <%= index_helper %>_url
|
32
|
+
expect(response).to be_successful
|
33
|
+
end
|
34
|
+
end
|
35
|
+
<% end -%>
|
36
|
+
|
37
|
+
describe "GET /show" do
|
38
|
+
it "renders a successful response" do
|
39
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
40
|
+
get <%= show_helper.tr('@', '') %>
|
41
|
+
expect(response).to be_successful
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "GET /new" do
|
46
|
+
it "renders a successful response" do
|
47
|
+
get <%= new_helper %>
|
48
|
+
expect(response).to be_successful
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "GET /edit" do
|
53
|
+
it "render a successful response" do
|
54
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
55
|
+
get <%= edit_helper.tr('@','') %>
|
56
|
+
expect(response).to be_successful
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "POST /create" do
|
61
|
+
context "with valid parameters" do
|
62
|
+
it "creates a new <%= class_name %>" do
|
63
|
+
expect {
|
64
|
+
post <%= index_helper %>_url, params: { <%= ns_file_name %>: valid_attributes }
|
65
|
+
}.to change(<%= class_name %>, :count).by(1)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "redirects to the created <%= ns_file_name %>" do
|
69
|
+
post <%= index_helper %>_url, params: { <%= ns_file_name %>: valid_attributes }
|
70
|
+
expect(response).to redirect_to(<%= show_helper.gsub("\@#{file_name}", class_name+".last") %>)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "with invalid parameters" do
|
75
|
+
it "does not create a new <%= class_name %>" do
|
76
|
+
expect {
|
77
|
+
post <%= index_helper %>_url, params: { <%= ns_file_name %>: invalid_attributes }
|
78
|
+
}.to change(<%= class_name %>, :count).by(0)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "renders a successful response (i.e. to display the 'new' template)" do
|
82
|
+
post <%= index_helper %>_url, params: { <%= ns_file_name %>: invalid_attributes }
|
83
|
+
expect(response).to be_successful
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "PATCH /update" do
|
89
|
+
context "with valid parameters" do
|
90
|
+
let(:new_attributes) {
|
91
|
+
skip("Add a hash of attributes valid for your model")
|
92
|
+
}
|
93
|
+
|
94
|
+
it "updates the requested <%= ns_file_name %>" do
|
95
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
96
|
+
patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: new_attributes }
|
97
|
+
<%= file_name %>.reload
|
98
|
+
skip("Add assertions for updated state")
|
99
|
+
end
|
100
|
+
|
101
|
+
it "redirects to the <%= ns_file_name %>" do
|
102
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
103
|
+
patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: new_attributes }
|
104
|
+
<%= file_name %>.reload
|
105
|
+
expect(response).to redirect_to(<%= singular_table_name %>_url(<%= file_name %>))
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "with invalid parameters" do
|
110
|
+
it "renders a successful response (i.e. to display the 'edit' template)" do
|
111
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
112
|
+
patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: invalid_attributes }
|
113
|
+
expect(response).to be_successful
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "DELETE /destroy" do
|
119
|
+
it "destroys the requested <%= ns_file_name %>" do
|
120
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
121
|
+
expect {
|
122
|
+
delete <%= show_helper.tr('@', '') %>
|
123
|
+
}.to change(<%= class_name %>, :count).by(-1)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "redirects to the <%= table_name %> list" do
|
127
|
+
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
128
|
+
delete <%= show_helper.tr('@', '') %>
|
129
|
+
expect(response).to redirect_to(<%= index_helper %>_url)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
<% end -%>
|
data/lib/rspec-rails.rb
CHANGED
data/lib/rspec/rails/adapters.rb
CHANGED
@@ -146,9 +146,9 @@ module RSpec
|
|
146
146
|
# examples without exposing non-assertion methods in Test::Unit or
|
147
147
|
# Minitest.
|
148
148
|
def assertion_method_names
|
149
|
-
::RSpec::Rails::Assertions
|
150
|
-
public_instance_methods
|
151
|
-
select do |m|
|
149
|
+
::RSpec::Rails::Assertions
|
150
|
+
.public_instance_methods
|
151
|
+
.select do |m|
|
152
152
|
m.to_s =~ /^(assert|flunk|refute)/
|
153
153
|
end
|
154
154
|
end
|
@@ -55,8 +55,7 @@ module RSpec
|
|
55
55
|
end
|
56
56
|
|
57
57
|
# @private
|
58
|
-
# rubocop:disable Metrics/MethodLength
|
59
|
-
def self.initialize_configuration(config)
|
58
|
+
def self.initialize_configuration(config) # rubocop:disable Metrics/MethodLength
|
60
59
|
config.backtrace_exclusion_patterns << /vendor\//
|
61
60
|
config.backtrace_exclusion_patterns << %r{lib/rspec/rails}
|
62
61
|
|
@@ -64,6 +63,7 @@ module RSpec
|
|
64
63
|
config.add_setting :infer_base_class_for_anonymous_controllers, default: true
|
65
64
|
|
66
65
|
# fixture support
|
66
|
+
config.add_setting :use_active_record, default: true
|
67
67
|
config.add_setting :use_transactional_fixtures, alias_with: :use_transactional_examples
|
68
68
|
config.add_setting :use_instantiated_fixtures
|
69
69
|
config.add_setting :global_fixtures
|
@@ -151,7 +151,6 @@ module RSpec
|
|
151
151
|
config.include RSpec::Rails::MailboxExampleGroup, type: :mailbox
|
152
152
|
end
|
153
153
|
end
|
154
|
-
# rubocop:enable Metrics/MethodLength
|
155
154
|
|
156
155
|
initialize_configuration RSpec.configuration
|
157
156
|
end
|
@@ -34,7 +34,7 @@ if RSpec::Rails::FeatureCheck.has_action_cable_testing?
|
|
34
34
|
next if klass <= ::ActionCable::Channel::Base
|
35
35
|
|
36
36
|
raise "Described class is not a channel class.\n" \
|
37
|
-
"Specify the channel class in the `describe` statement "\
|
37
|
+
"Specify the channel class in the `describe` statement " \
|
38
38
|
"or set it manually using `tests MyChannelClass`"
|
39
39
|
end
|
40
40
|
end
|
@@ -45,7 +45,7 @@ if RSpec::Rails::FeatureCheck.has_action_cable_testing?
|
|
45
45
|
next if klass <= ::ActionCable::Connection::Base
|
46
46
|
|
47
47
|
raise "Described class is not a connection class.\n" \
|
48
|
-
"Specify the connection class in the `describe` statement "\
|
48
|
+
"Specify the connection class in the `describe` statement " \
|
49
49
|
"or set it manually using `tests MyConnectionClass`"
|
50
50
|
end
|
51
51
|
end
|
@@ -15,7 +15,9 @@ module RSpec
|
|
15
15
|
include app.routes.url_helpers if app.routes.respond_to?(:url_helpers)
|
16
16
|
include app.routes.mounted_helpers if app.routes.respond_to?(:mounted_helpers)
|
17
17
|
|
18
|
-
default_url_options
|
18
|
+
if respond_to?(:default_url_options)
|
19
|
+
default_url_options[:host] ||= ::RSpec::Rails::FeatureExampleGroup::DEFAULT_HOST
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -38,34 +40,14 @@ unless RSpec.respond_to?(:feature)
|
|
38
40
|
capybara_feature: true,
|
39
41
|
type: :feature,
|
40
42
|
skip: <<-EOT.squish
|
41
|
-
Feature specs require the Capybara (https://github.com/
|
42
|
-
gem, version 2.
|
43
|
-
some deprecation warnings and have support for
|
44
|
-
`config.expose_dsl_globally = false`.
|
43
|
+
Feature specs require the Capybara (https://github.com/teamcapybara/capybara)
|
44
|
+
gem, version 2.13.0 or later.
|
45
45
|
EOT
|
46
46
|
}
|
47
47
|
|
48
|
-
# Capybara's monkey patching causes us to have to jump through some hoops
|
49
|
-
top_level = self
|
50
|
-
main_feature = nil
|
51
|
-
if defined?(Capybara) && ::Capybara::VERSION.to_f < 2.4
|
52
|
-
# Capybara 2.2 and 2.3 do not use `alias_example_xyz`
|
53
|
-
opts[:skip] = <<-EOT.squish
|
54
|
-
Capybara < 2.4.0 does not support RSpec's namespace or
|
55
|
-
`config.expose_dsl_globally = false`. Upgrade to Capybara >= 2.4.0.
|
56
|
-
EOT
|
57
|
-
main_feature = top_level.method(:feature) if top_level.respond_to?(:feature)
|
58
|
-
end
|
59
|
-
|
60
48
|
RSpec.configure do |c|
|
61
|
-
main_feature = nil unless c.expose_dsl_globally?
|
62
49
|
c.alias_example_group_to :feature, opts
|
63
50
|
c.alias_example_to :scenario
|
64
51
|
c.alias_example_to :xscenario, skip: 'Temporarily skipped with xscenario'
|
65
52
|
end
|
66
|
-
|
67
|
-
# Due to load order issues and `config.expose_dsl_globally?` defaulting to
|
68
|
-
# `true` we need to put Capybara's monkey patch method back. Otherwise,
|
69
|
-
# app upgrades have a high likelyhood of having all feature specs skipped.
|
70
|
-
top_level.define_singleton_method(:feature, &main_feature) if main_feature
|
71
53
|
end
|
@@ -71,7 +71,6 @@ module RSpec
|
|
71
71
|
original_after_teardown =
|
72
72
|
::ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown.instance_method(:after_teardown)
|
73
73
|
|
74
|
-
other.include ActionDispatch::IntegrationTest::Behavior
|
75
74
|
other.include ::ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown
|
76
75
|
other.include ::ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper
|
77
76
|
other.include BlowAwayTeardownHooks
|
@@ -149,7 +149,7 @@ module RSpec
|
|
149
149
|
# the original string.
|
150
150
|
match = path_regex.match(_default_file_to_render)
|
151
151
|
|
152
|
-
render_options = {
|
152
|
+
render_options = {template: match[:template]}
|
153
153
|
render_options[:handlers] = [match[:handler]] if match[:handler]
|
154
154
|
render_options[:formats] = [match[:format].to_sym] if match[:format]
|
155
155
|
render_options[:locales] = [match[:locale]] if match[:locale]
|
@@ -10,42 +10,53 @@ module RSpec
|
|
10
10
|
include ActiveRecord::TestFixtures
|
11
11
|
|
12
12
|
included do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
if RSpec.configuration.use_active_record?
|
14
|
+
include Fixtures
|
15
|
+
|
16
|
+
self.fixture_path = RSpec.configuration.fixture_path
|
17
|
+
if ::Rails::VERSION::STRING > '5'
|
18
|
+
self.use_transactional_tests = RSpec.configuration.use_transactional_fixtures
|
19
|
+
else
|
20
|
+
self.use_transactional_fixtures = RSpec.configuration.use_transactional_fixtures
|
21
|
+
end
|
22
|
+
self.use_instantiated_fixtures = RSpec.configuration.use_instantiated_fixtures
|
23
|
+
|
24
|
+
fixtures RSpec.configuration.global_fixtures if RSpec.configuration.global_fixtures
|
18
25
|
end
|
19
|
-
|
26
|
+
end
|
20
27
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
28
|
+
module Fixtures
|
29
|
+
extend ActiveSupport::Concern
|
30
|
+
|
31
|
+
class_methods do
|
32
|
+
def fixtures(*args)
|
33
|
+
orig_methods = private_instance_methods
|
34
|
+
super.tap do
|
35
|
+
new_methods = private_instance_methods - orig_methods
|
36
|
+
new_methods.each do |method_name|
|
37
|
+
proxy_method_warning_if_called_in_before_context_scope(method_name)
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
29
|
-
end
|
30
41
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
42
|
+
def proxy_method_warning_if_called_in_before_context_scope(method_name)
|
43
|
+
orig_implementation = instance_method(method_name)
|
44
|
+
define_method(method_name) do |*args, &blk|
|
45
|
+
if inspect.include?("before(:context)")
|
46
|
+
RSpec.warn_with("Calling fixture method in before :context ")
|
47
|
+
else
|
48
|
+
orig_implementation.bind(self).call(*args, &blk)
|
49
|
+
end
|
38
50
|
end
|
39
51
|
end
|
40
52
|
end
|
41
53
|
|
42
54
|
if ::Rails.version.to_f >= 6.1
|
55
|
+
# @private return the example name for TestFixtures
|
43
56
|
def name
|
44
57
|
@example
|
45
58
|
end
|
46
59
|
end
|
47
|
-
|
48
|
-
fixtures RSpec.configuration.global_fixtures if RSpec.configuration.global_fixtures
|
49
60
|
end
|
50
61
|
end
|
51
62
|
end
|
@@ -8,15 +8,15 @@ module RSpec
|
|
8
8
|
def initialize(target, channel:)
|
9
9
|
@target = target
|
10
10
|
@channel = channel
|
11
|
-
@block =
|
11
|
+
@block = proc { }
|
12
12
|
@data = nil
|
13
13
|
set_expected_number(:exactly, 1)
|
14
14
|
end
|
15
15
|
|
16
|
-
def with(data = nil)
|
16
|
+
def with(data = nil, &block)
|
17
17
|
@data = data
|
18
18
|
@data = @data.with_indifferent_access if @data.is_a?(Hash)
|
19
|
-
@block =
|
19
|
+
@block = block if block
|
20
20
|
self
|
21
21
|
end
|
22
22
|
|
@@ -15,7 +15,7 @@ module RSpec
|
|
15
15
|
@args = []
|
16
16
|
@queue = nil
|
17
17
|
@at = nil
|
18
|
-
@block =
|
18
|
+
@block = proc { }
|
19
19
|
set_expected_number(:exactly, 1)
|
20
20
|
end
|
21
21
|
|
@@ -26,7 +26,7 @@ module RSpec
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def on_queue(queue)
|
29
|
-
@queue = queue
|
29
|
+
@queue = queue.to_s
|
30
30
|
self
|
31
31
|
end
|
32
32
|
|
@@ -26,7 +26,7 @@ module RSpec
|
|
26
26
|
path, query = *verb_to_path_map.values.first.split('?')
|
27
27
|
@scope.assert_recognizes(
|
28
28
|
@expected,
|
29
|
-
{
|
29
|
+
{method: verb_to_path_map.keys.first, path: path},
|
30
30
|
Rack::Utils.parse_nested_query(query)
|
31
31
|
)
|
32
32
|
end
|
@@ -115,7 +115,7 @@ module RSpec
|
|
115
115
|
# Shorthand method for matching this type of route.
|
116
116
|
%w[get post put patch delete options head].each do |method|
|
117
117
|
define_method method do |path|
|
118
|
-
{
|
118
|
+
{method.to_sym => path}
|
119
119
|
end
|
120
120
|
end
|
121
121
|
end
|
@@ -12,10 +12,10 @@ RSpec::Core::RakeTask.new(spec: "spec:prepare")
|
|
12
12
|
|
13
13
|
namespace :spec do
|
14
14
|
types = begin
|
15
|
-
dirs = Dir['./spec/**/*_spec.rb']
|
16
|
-
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }
|
17
|
-
uniq
|
18
|
-
select { |f| File.directory?(f) }
|
15
|
+
dirs = Dir['./spec/**/*_spec.rb']
|
16
|
+
.map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }
|
17
|
+
.uniq
|
18
|
+
.select { |f| File.directory?(f) }
|
19
19
|
Hash[dirs.map { |d| [d.split('/').last, d] }]
|
20
20
|
end
|
21
21
|
|
@@ -9,11 +9,6 @@ rescue LoadError
|
|
9
9
|
end
|
10
10
|
|
11
11
|
if defined?(Capybara)
|
12
|
-
require 'rspec/support/comparable_version'
|
13
|
-
unless RSpec::Support::ComparableVersion.new(Capybara::VERSION) >= '2.2.0'
|
14
|
-
raise "You are using capybara #{Capybara::VERSION}. RSpec requires >= 2.2.0."
|
15
|
-
end
|
16
|
-
|
17
12
|
RSpec.configure do |c|
|
18
13
|
if defined?(Capybara::DSL)
|
19
14
|
c.include Capybara::DSL, type: :feature
|
data/lib/rspec/rails/version.rb
CHANGED
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.0.0.
|
4
|
+
version: 4.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chelimsky
|
@@ -44,10 +44,10 @@ cert_chain:
|
|
44
44
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
45
45
|
F3MdtaDehhjC
|
46
46
|
-----END CERTIFICATE-----
|
47
|
-
date: 2020-
|
47
|
+
date: 2020-03-13 00:00:00.000000000 Z
|
48
48
|
dependencies:
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: actionpack
|
51
51
|
requirement: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
@@ -61,7 +61,7 @@ dependencies:
|
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '4.2'
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
64
|
+
name: activesupport
|
65
65
|
requirement: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ">="
|
@@ -145,19 +145,19 @@ dependencies:
|
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '3.9'
|
147
147
|
- !ruby/object:Gem::Dependency
|
148
|
-
name:
|
148
|
+
name: ammeter
|
149
149
|
requirement: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
151
|
- - "~>"
|
152
152
|
- !ruby/object:Gem::Version
|
153
|
-
version: 1.
|
153
|
+
version: 1.1.2
|
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.
|
160
|
+
version: 1.1.2
|
161
161
|
- !ruby/object:Gem::Dependency
|
162
162
|
name: aruba
|
163
163
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,19 +173,19 @@ dependencies:
|
|
173
173
|
- !ruby/object:Gem::Version
|
174
174
|
version: 0.14.12
|
175
175
|
- !ruby/object:Gem::Dependency
|
176
|
-
name:
|
176
|
+
name: cucumber
|
177
177
|
requirement: !ruby/object:Gem::Requirement
|
178
178
|
requirements:
|
179
179
|
- - "~>"
|
180
180
|
- !ruby/object:Gem::Version
|
181
|
-
version: 1.
|
181
|
+
version: 1.3.5
|
182
182
|
type: :development
|
183
183
|
prerelease: false
|
184
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
185
|
requirements:
|
186
186
|
- - "~>"
|
187
187
|
- !ruby/object:Gem::Version
|
188
|
-
version: 1.
|
188
|
+
version: 1.3.5
|
189
189
|
description: rspec-rails is a testing framework for Rails 5+.
|
190
190
|
email: rspec@googlegroups.com
|
191
191
|
executables: []
|
@@ -209,8 +209,8 @@ files:
|
|
209
209
|
- lib/generators/rspec/feature/feature_generator.rb
|
210
210
|
- lib/generators/rspec/feature/templates/feature_singular_spec.rb
|
211
211
|
- lib/generators/rspec/feature/templates/feature_spec.rb
|
212
|
-
- lib/generators/rspec/
|
213
|
-
- lib/generators/rspec/
|
212
|
+
- lib/generators/rspec/generator/generator_generator.rb
|
213
|
+
- lib/generators/rspec/generator/templates/generator_spec.rb
|
214
214
|
- lib/generators/rspec/helper/helper_generator.rb
|
215
215
|
- lib/generators/rspec/helper/templates/helper_spec.rb
|
216
216
|
- lib/generators/rspec/install/install_generator.rb
|
@@ -231,10 +231,12 @@ files:
|
|
231
231
|
- lib/generators/rspec/request/request_generator.rb
|
232
232
|
- lib/generators/rspec/scaffold/scaffold_generator.rb
|
233
233
|
- lib/generators/rspec/scaffold/templates/api_controller_spec.rb
|
234
|
+
- lib/generators/rspec/scaffold/templates/api_request_spec.rb
|
234
235
|
- lib/generators/rspec/scaffold/templates/controller_spec.rb
|
235
236
|
- lib/generators/rspec/scaffold/templates/edit_spec.rb
|
236
237
|
- lib/generators/rspec/scaffold/templates/index_spec.rb
|
237
238
|
- lib/generators/rspec/scaffold/templates/new_spec.rb
|
239
|
+
- lib/generators/rspec/scaffold/templates/request_spec.rb
|
238
240
|
- lib/generators/rspec/scaffold/templates/routing_spec.rb
|
239
241
|
- lib/generators/rspec/scaffold/templates/show_spec.rb
|
240
242
|
- lib/generators/rspec/system/system_generator.rb
|
@@ -294,7 +296,7 @@ licenses:
|
|
294
296
|
- MIT
|
295
297
|
metadata:
|
296
298
|
bug_tracker_uri: https://github.com/rspec/rspec-rails/issues
|
297
|
-
changelog_uri: https://github.com/rspec/rspec-rails/blob/v4.0.0.
|
299
|
+
changelog_uri: https://github.com/rspec/rspec-rails/blob/v4.0.0.rc1/Changelog.md
|
298
300
|
documentation_uri: https://rspec.info/documentation/
|
299
301
|
mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
|
300
302
|
source_code_uri: https://github.com/rspec/rspec-rails
|
metadata.gz.sig
CHANGED
Binary file
|