rspec-rails 4.0.0.beta4 → 4.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|